Java:获取当前印度时间

时间:2019-02-11 09:16:41

标签: java date localdate

我无法获取当前的印度时间。

我想获取印度的当前时间,所以我会在5分钟后更新当前时间,然后更新当前时间,因此我的系统时钟比印度实际时间早5分钟运行,但是我想获取印度的标准时间。

current time is 11:05:06 and machine time is 11:10:06

public class TestDate {

    public static void main(String[] args) {
        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));
    }
}

output : 2019.02.12 AD at 11:10:06 IST
expected : 2019.02.12 AD at 11:05:06 IST

但是我的输出错误,所以请提出建议

2 个答案:

答案 0 :(得分:2)

Java 8中新的类似Date的API已取代JodaTime API。
使用ZonedDateTime对象。

final ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));

这将为您提供输出2019-02-11T14:49:28.625+05:30[Asia/Kolkata]

要格式化Temporal,请使用DateTimeFormatter

DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                 .format(now);

答案 1 :(得分:0)

UTC+05:30

这不是时区,只是一个偏移量。您需要使用有效的时区才能打印该时区中的日期,例如:Asia/Kolkata

以下应该有效:

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
    SimpleDateFormat gmtDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    gmtDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
    //Current Date Time in GMT
    System.out.println("Current Date and Time in UTC time zone: " + gmtDateFormat.format(new Date()));
}

此外,Asia/Kolkata时区并不总是UTC+05:30,这取决于夏令时。因此,我们宁可按名称使用时区,也不要使用offset。