Dateformat将IST转换为GMT

时间:2015-03-23 07:54:09

标签: java

IST转换为GMT时出现问题。

DateFormat df = new SimpleDateFormat("HH:mm:ss z");

String input = "05:30:00 IST";
Date d = df.parse(input);

Calendar c = Calendar.getInstance();
c.setTime(d);



System.out.println(c.getTime());

Thu Jan 01 03:30:00 GMT 1970作为输出而不是Thu Jan 01 00:00:00 GMT 1970

2 个答案:

答案 0 :(得分:0)

你似乎要在这里做的事情有很多不妥之处。

  • 您正在尝试使用java.util.Date对象来包含一天的时间(小时,分钟,秒)。 java.util.Date对象不适用于此目的。 java.util.Date对象实际上是一个时间戳 - 它代表一个"绝对"时刻,自格林威治标准时间01-01-1970 00:00:00算起的毫秒数。

  • java.util.Date对象不包含时区信息。您无法将Date对象从一个时区转换为另一个时区,因为Date对象根本不包含有关时区的信息。

  • 如果您只知道小时,分钟和秒钟,则无法将时间从一个时区转换为另一个时区。结果还取决于日期(年,月,日) - 结果可能受夏令时过渡的影响。因此,如果您不知道日期,则无法将时间从一个时区转换为另一个时区。

如果您使用Java 8 java.time API,那么它很简单;使用ZonedDateTime,其中包含有关时区的信息。

// Assuming that with "IST" you mean India Standard Time
ZonedDateTime input = ZonedDateTime.of(2015, 3, 23, 5, 30, 0, 0, ZoneId.of("Asia/Calcutta"));
System.out.println(input);

ZonedDateTime output = input.withZoneSameInstant(ZoneId.of("GMT"));
System.out.println(output);

如果您想使用旧的java.util.Datejava.util.Calendar API,那么您可以在用于显示日期的DateFormat对象上设置时区,而不是{{1对象本身:

Date

答案 1 :(得分:0)

你应该警惕使用三个字母的时区缩写,因为它们含糊不清。在这种情况下,IST可以参考:

  • 印度标准时间(UTC + 0530)
  • 以色列标准时间(UTC + 02)
  • 爱尔兰标准时间(UTC + 01)

Wikipedia列出了一些常见的时区缩写;其他含糊不清的常用缩写的例子如下:

  • AM(S)笔
  • AST
  • BST
  • CDT
  • CST
  • ECT
  • FKST
  • GST
  • MST

最好使用UTC偏移(例如+0530表示印度标准时间)或唯一定义的时区标识符(例如Asia/Calcutta