Java:获取当前印度时间

Posted

技术标签:

【中文标题】Java:获取当前印度时间【英文标题】:Java : to get current india time [duplicate] 【发布时间】:2019-07-04 18:00:04 【问题描述】:

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

我想获得印度的当前时间,我在 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

但我得到了错误的输出,所以请建议

【问题讨论】:

我推荐this answer to the linked original question。 我建议你不要使用SimpleDateFormatTimeZoneDate。这些类设计不佳且过时已久,尤其是第一个类是出了名的麻烦。而是使用ZonedDateTimeZoneIdDateTimeFormatter,均来自java.time, the modern Java date and time API。 您所在时区的系统时间是否正确?如果没有,您应该同步它。如果你不能,那么你需要在某个地方使用 web api 来获取正确的时间。 @TiiJ7 是的,这才是真正的“问题”,现在我明白了 你总是会得到运行命令的机器的时间,句号。获得其他时间的唯一方法是调用时间服务,例如 NTP 服务器,然后向它请求。 【参考方案1】:

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,它取决于夏令时。所以,我们宁愿按名称使用时区而不是偏移量。

【讨论】:

仅供参考,非常麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat,现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。【参考方案2】:

Date API 已被 Java 8 中的类似 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);

【讨论】:

请尝试理解我的问题,我想获得印度的全球时间,通过这个我得到我的本地机器时间,本地机器时间是用户的变体,我想获得全球时间 @BhartiLadumor 不,您在这里获得的是亚洲/加尔各答时间,而不是您的当地时间。什么是全球时间? 我的当地时间早于 5 分钟,然后是全球时间。我的机器时间提前 5 分钟更改 @BhartiLadumor 5 分钟不代表时区。您的计算机时钟只是不同步。 @BhartiLadumor:您的意思是您的计算机时钟不准确,您想从网络上的某个来源获取当前时间吗?这是一个非常不同的事情,因为它与您感兴趣的时区不同。

以上是关于Java:获取当前印度时间的主要内容,如果未能解决你的问题,请参考以下文章

android获取当前位置名称

如何在 Dart/Flutter 中获取当前时间的 GMT 时间偏移值

当我像印度这样动态点击特定国家时如何获取价值

如何在 Google Autocomplete iOS 中仅获取印度城市名称?

使用 JAVA/PHP 将 Netbanking 集成到网站(在印度)[关闭]

获取特定时区的时间[重复]