2017-01-19 8 views
0

Я пытаюсь разобрать IDT и IST даты, чтобы UnixTime в UTC
Например:
время Преобразовать в IDT/IST для UnixTime в UTC

Thu Sep 10 07:30:20 IDT 2016 

В этот день я хотел бы получить UNIX время дата, но в час 04:30:20
И если бы это был IST я хотел бы получить UnixTime от 05:30:20 в тот же день

SimpleDateFormat formatter= new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC"); 
System.out.println(formatter.parse(date).getTime()) 

Я все еще получаю UnixTime от 07:30 : 20 inste ad 05:30:20 или 04:30:20 (IST/IDT)

ответ

3

Если вы хотите увидеть форматированный результат в формате UTC, вам понадобится второй форматтер с возможным разным шаблоном и локалью и зоной, установленной в UTC:

String input1 = "Sat Sep 10 07:30:20 IDT 2016"; 
String input2 = "Sat Dec 10 07:30:20 IST 2016"; 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
Date d1 = sdf.parse(input1); 
Date d2 = sdf.parse(input2); 

SimpleDateFormat sdfOut = 
    new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
sdfOut.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println("IDT=>UTC: " + sdfOut.format(d1)); 
System.out.println("IST=>UTC: " + sdfOut.format(d2)); 

Выход:

IDT=>UTC: Sat Sep 10 04:30:20 UTC 2016 
IST=>UTC: Sat Dec 10 05:30:20 UTC 2016 

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

Сторона примечания: Сокращение временных сокращений, таких как IST, опасно, поскольку эта аббревиатура имеет несколько значений. Вы, очевидно, хотите время Израиля, но IST еще чаще интерпретируется как стандартное время Индии. Ну, вам повезло, что SimpleDateFormat -symbol «z» интерпретирует его как Israel Standard Time (работает хотя бы для меня в моей среде). Если вы хотите быть уверены в правильной интерпретации «ИСТ», то вам следует рассмотреть возможность включения в библиотеку и установить предпочтение израильскому времени при обработке, например, в Java-8:

DateTimeFormatterBuilder.setZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Asia/Jerusalem")))

+0

Привет. Спасибо за ответ. Что делать, если я хочу получить unixtime строки даты IDT \ IST, которую я получил? Если я проанализирую дату, она вернется к местному времени. любое решение для этой проблемы? @Meno Hochschild – user3100708

+0

@ user3100708 В приведенном выше коде показано, как разбить строку IDT/IST на объект типа 'java.util.Date'. Этот объект никогда не является местным временем (хотя его метод 'toString()' описывает его не полностью в вашей системной зоне с местным временем). Действительно, он представляет мгновение, и его истинное состояние может быть запрошено как истекшее время в миллисекундах с эпохи Unix [getTime()] (https://docs.oracle.com/javase/8/docs/api/java/util /Date.html#getTime--) Если вы используете этот метод, вам просто нужно разделить результат на 1000, и вы получите время Unix. –