2013-11-27 5 views
8

У меня есть строка как это 2013-10-22T01:37:56. Мне нужно изменить эту строку в формате UTC Date, как это MM/dd/yyyy KK:mm:ss a. Я пробовал какой-то код, но он не возвращает дату и время UTC.Дата в формате UTC Java

Мой код

 String[] time = itsAlarmDttm.split("T"); 
     String aFormatDate = time[0]+ " "+time[1]; 
     String aRevisedDate = null; 
     try { 
      final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      final Date dateObj = sdf.parse(aFormatDate); 
      aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); 
      System.out.println(aRevisedDate); 
     } catch (ParseException e) { 
      itsLogger.error("Error occured in Parsing the Data Time Object: " +e.getMessage()); 
     } catch (Exception e) { 
      itsLogger.error("Error occured in Data Time Objecct: " +e.getMessage()); 
     } 

Я получаю выход формата MM/dd/yyyy KK:mm:ss a. Но не формат времени UTC. Как решить эту проблему?

+0

что он возвращает? – Buddha

+1

Вместо печати dateObj, возможно, вам стоит напечатать aRevisedDate? – Julien

+4

UTC - это не определенный формат даты, а что-то вроде часового пояса. – Henry

ответ

9

Попробуйте отформатировать дату с Z или z часовых поясов флагов:

new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a Z").format(dateObj); 
15

Попробуйте это ... Работал для меня и распечатаны 10/22/2013 01:37:56 AM Ofcourse это ваш код только с небольшими изменениями.

final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // This line converts the given date into UTC time zone 
final java.util.Date dateObj = sdf.parse("2013-10-22T01:37:56"); 

aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); 
System.out.println(aRevisedDate); 
+0

sdf.setTimeZone (TimeZone.getTimeZone («UTC»)); - это именно то, что я искал –

+1

Пример хаотичен. «sdf.setTimeZone (...)» появляется после «sdf.parse (...)». И «format (dateObj)» использует новый SimpleDateFormat. Таким образом, «setTimeZone» не влияет на что-либо здесь. Это правильный намек. – jox

2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
// or SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a Z"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(sdf.format(new Date())); 
4

Какие часовые пояса?

Нет, на ваш вопрос вы упомянули time zone. Какой часовой пояс подразумевает входную строку? Какой часовой пояс вы хотите для своего вывода? И, UTC - это часовой пояс (или его отсутствие в зависимости от вашего мышления) не строковый формат.

ISO 8601

Ваша входная строка в формате ISO 8601, за исключением того, что ему не хватает offset from UTC.

Joda время

Вот несколько примеров коды в Joda-Time 2.3, чтобы показать вам, как обрабатывать часовые пояса. Joda-Time имеет встроенный по умолчанию formatters для синтаксического анализа и генерации строковых представлений значений даты и времени.

String input = "2013-10-22T01:37:56"; 
DateTime dateTimeUtc = new DateTime(input, DateTimeZone.UTC); 
DateTime dateTimeMontréal = dateTimeUtc.withZone(DateTimeZone.forID("America/Montreal"); 
String output = dateTimeMontréal.toString(); 

Что касается создания строковых представлений в других форматах, найдите StackOverflow для «Joda format».

Смежные вопросы