Дата форматирования Android с часовым поясом

Мне нужно отформатировать дату в определенной строке.

Я использовал класс SimpleDateFormat для форматирования даты с использованием шаблона " yyyy-MM-dd'T'HH:mm:ssZ", который возвращает текущую дату как "2013-01-04T15:51:45+0530", но мне нужно как "2013-01-04T15:51:45+05:30".

Ниже используется используемое кодирование,

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);      
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));

Вывод: форматированная строка: 2013-01-04T15:51:45+0530

Мне нужен формат 2013-01-04T15:51:45+05:30, просто добавляющий двоеточие между gmt time.

Поскольку я работаю над календарем Google, чтобы вставить событие, он принимает только требуемый формат, о котором я упомянул.

Ответ 1

Вместо этого вы можете использовать Joda Time. Его DateTimeFormat имеет атрибут формата ZZ, который делает то, что вы хотите.

Ссылка

Большое преимущество: в отличие от SimpleDateFormat, DateTimeFormatter является потокобезопасным. Использование:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ")
    .withLocale(Locale.ENGLISH);

Ответ 2

Вы также можете использовать "ZZZZZ" вместо "Z" в своем шаблоне (согласно документации). Что-то вроде этого

    Calendar c = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);      
    Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));

Ответ 3

Что вы можете сделать, просто добавьте ":" вручную, используя substring(). Я столкнулся с этим раньше, и это решение работает.

Ответ 4

Попробуйте это

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);   

System.out.println("formatted string: "+sdf.format(c.getTime()));

String text = sdf.format(c.getTime());  
String result = text.substring(0, 22) + ":" + text.substring(22);  
System.out.println("result = " + result);

Ответ 5

Почему бы просто не делать это вручную с регулярным выражением?

String oldDate = "2013-01-04T15:51:45+0530";
String newDate = oldDate.replaceAll("(\\+\\d\\d)(\\d\\d)", "$1:$2");

Тот же результат, с подстрокой (если производительность является проблемой).

String oldDate = "2013-01-04T15:51:45+0530";
int length = oldDate.length();
String newDate = oldDate.substring(0, length - 2) + ':' + oldDate.substring(length - 2);

Ответ 6

Попробуйте этот код

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.ENGLISH);
String s = sdf.format(c.getTime());
String fDate = s.substring(0, s.length()-2) +":"+s.substring(s.length()-2, s.length());
Log.e("check", "formatted string: "+fDate);

Ответ 7

Просто отредактируйте этот код и замените "Locale.getDefault()" на нужный вам язык

private SimpleDateFormat getDateFormat() {
    SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.DEFAULT, Locale.getDefault());
    String pattern = dateFormat.toLocalizedPattern();
    pattern = pattern.trim();
    dateFormat.applyLocalizedPattern(pattern);
    return dateFormat;
}

//И здесь используется

SimpleDateFormat sdf = getDateFormat();

sdf.format(новая дата());