如何从java中的给定时区名称获取当前时间?

时间:2017-03-22 06:15:31

标签: java datetime timezone jodatime simpledateformat

我希望从给定时区获得当前时间,例如“IST”或“印度标准时间”等。 当输入为“印度标准时间”或“协调世界时”时,我无法得到时间。它仅适用于“IST”或“UTC”或“EST”等。 我试过Joda-Time和SimpleDateFormat。

SimpleDateFormat sd = new SimpleDateFormat(
            "yyyy.MM.dd G 'at' HH:mm:ss z");
Date date = new Date();
sd.setTimeZone(TimeZone.getTimeZone("IST"));
System.out.println(sd.format(date));



DateTime now = new DateTime();
//DateTimeZone LDateTimeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTimeZone LDateTimeZone = DateTimeZone.forID( "IST" );   //deprecated
System.out.println( "Joda-Time zone: " + now.toDateTime( LDateTimeZone ) );

有没有办法处理这两个输入?

2 个答案:

答案 0 :(得分:2)

我不能更强烈地反对使用旧版java.util.Date。您应该使用相应的java.time类。

java.time.ZonedDateTime中,您可以创建时区别名地图并根据需要填充它。它并不漂亮,但它确实有效。

Map<String, String> aliasMap = new HashMap<>();
aliasMap.put("IST", "Asia/Calcutta");
aliasMap.put("Indian Standard Time", "Asia/Calcutta");
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Indian Standard Time", aliasMap));

答案 1 :(得分:0)

我认为你可以使用joda

这样做
TimeZone timezone;
timezone = TimeZone.getTimeZone("Indian Standard Time");
DateTime dt = new DateTime(new Date());
DateTimeZone dtZone = DateTimeZone.forTimeZone(timezone);
DateTime afterSetTimezone = dt.withZone(dtZone);
Date date = afterSetTimezone.toLocalDateTime().toDate();
System.out.println(date);