2015-01-08 3 views
0

В настоящее время я пытаюсь получить создать Java Дата, которая не выглядит так же, независимо от того, что часовой пояс я его просмотра в Мой текущий код:Java Дата, которая выглядит так же в любом часовом поясе

Calendar cal = Calendar.getInstance(); 
    cal.set(2015, Calendar.JANUARY, 8, 0, 0, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    Date date = cal.getTime(); 

В моем текущем TIMEZONE это дает мне «2015-01-08T00: 00: 00Z'In другой, это дает мне 2015-01-08T00: 00: 00-03: 00. Я хочу знать, есть ли способ отбросить часть часового пояса, чтобы время было одинаковым в обоих часовых поясах.

Я был бы ОЧЕНЬ благодарен за любую помощь по этому вопросу. Спасибо.

+0

С Java 8 вы можете использовать LocalDateTime. – assylias

+1

Я думаю, вы ищете время UTC. Таким образом, клиент (который знает свой часовой пояс) конвертирует UTC в местное время. – guptakvgaurav

+1

Используйте JodaTime, если у вас нет Java 8. Есть почти такие же, как пакет времени Java 8 основан на JodaTime. –

ответ

2

Java SE 8 поставляется с новой датой & Time API. Посмотрите на LocalDate и LocalDateTime.

+0

Библиотека [Joda-Time] (http://www.joda.org/joda-time/) также имеет такие же классы, чтобы представлять общее значение даты и времени без какого-либо назначенного часового пояса. –

0

Если вас интересует только формат времени, создайте объект java.text.SimpleDateFormat, чтобы напечатать ваше время в том формате, который вы хотите. http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html

Если вы хотите, чтобы время, чтобы быть распечатаны с теми же номерами независимо от часового пояса, Использование строк Идентификаторы [] = java.util.TimeZone.getAvailableIDs(); , чтобы получить идентификаторы TimeZone и найти идентификатор, который вы хотите.

В этом примере я создал два объекта SimpleDateFormat, настроенных на два разных часовых пояса. Они оба распечатывают один и тот же объект Calendar. Я снял Z в ft2, чтобы удалить часть часового пояса. Опираясь на toString(), я думаю, что вы будете подвержены различиям Locale при отображении дат, таких как US MM/dd/yyyy и UK dd/MM/yyyy.

 TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
     TimeZone tz2 = TimeZone.getTimeZone("America/Chicago"); 
     Calendar acal = new GregorianCalendar(); 
     SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss Z"); 
     ft.setTimeZone(tz); 
     SimpleDateFormat ft2 = new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss"); 
     ft2.setTimeZone(tz2); 
     String date1 = ft.format(acal.getTime()); 

     System.out.println(date1); 
     String date2 = ft2.format(acal.getTime()); 
     System.out.println(date2); 

Выход:

2015-01-08T10: 36: 39 -0500

2015-01-08T09: 36: 39

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