2014-01-10 2 views
1

У меня возникла проблема с форматированием даты с использованием Java. Форматирование даты, похоже, анализирует мою строку, используя BST (британское летнее время), а не GMT ​​+ 0, как определено +0000 в строке dateStr в приведенном ниже коде.Дата форматирования в Java

String dateStr = "Tue Oct 02 01:06:00 +0000 2012"; 
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
Date date = df.parse(dateStr); 

// Test the date   
System.out.println(date.toString()); 

Когда я запускаю приведенный выше код я получаю:

Tue Oct 02 02:06:00 BST 2012 

Который, очевидно, не то, что я хочу. Полезным источником информации может быть, что, когда я запускаю следующее:

System.out.println(TimeZone.getDefault().getDisplayName()); 

я получаю:

Greenwich Mean Time 

Выход я пытаюсь получить это

Tue Oct 02 01:06:00 GMT 2012 

Я уже пробовал .setTimeZone на df, но безрезультатно.

+0

Вы имели в виду GMT в ожидаемом выводе? Вы сказали, что BST, похоже, противоречит вашей дискуссии. –

+0

Woops. Да! Отредактировал его. –

ответ

1

Метод .toString() использует ваш язык при печати даты.

Использование:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
format.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(format.format(date)); 
0

Я понимаю, что BST уже устарел в SE 7.

0

вы можете попробовать, как здесь:

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", 
       Locale.CANADA); 

добавить местные арг в SimpleDateFormat конструктор

2

Отметьте, что вт. 02 окт 02:06:00 BST 2012 в то же время, что в Вт Окт 02 01: 0 6:00 +0000 2012, просто выраженный в другом часовом поясе. java.util.Date на самом деле не имеет дело с часовыми поясами, поскольку, насколько это касается его, нет никакой разницы. Объект Date, который вы создали, представляет собой правильную дату и время, которые вы хотите.

Метод Date.toString() по существу является только форматировщиком, который использует ваш JRE по умолчанию TimeZone в своем форматировании. Если вы хотите проверить правильность объекта Date, тогда вы должны построить объект java.util.Date (используя java.util.Calendar - большинство конструкторов Date устарели) для проверки. Если вы хотите создать строку отображения, то вы должны использовать экземпляр SimpleDateFormatter, который вы уже создали, для форматирования объекта Date.

Если вам нужен объект, который хранит информацию TimeZone, то вы должны использовать java.util.Calendar. java.util.Date почти не рекомендуется для того, чтобы быть непригодным для использования. Или сделайте то же самое, что и я, и дождитесь появления нового API данных и времени на Java 8.

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