Дата форматирования 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(новая дата());