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。 我建议你不要使用SimpleDateFormat
、TimeZone
和Date
。这些类设计不佳且过时已久,尤其是第一个类是出了名的麻烦。而是使用ZonedDateTime
、ZoneId
和DateTimeFormatter
,均来自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.Date
、java.util.Calendar
和 java.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:获取当前印度时间的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Dart/Flutter 中获取当前时间的 GMT 时间偏移值
如何在 Google Autocomplete iOS 中仅获取印度城市名称?