将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
答案 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.Date
和java.util.Calendar
API,那么您可以在用于显示日期的DateFormat
对象上设置时区,而不是{{1对象本身:
Date
答案 1 :(得分:0)
你应该警惕使用三个字母的时区缩写,因为它们含糊不清。在这种情况下,IST可以参考:
Wikipedia列出了一些常见的时区缩写;其他含糊不清的常用缩写的例子如下:
最好使用UTC偏移(例如+0530
表示印度标准时间)或唯一定义的时区标识符(例如Asia/Calcutta
)