使用Java中的各种Calendar TimeZone(不使用Joda Time)

我正在寻找一种方法来根据用户输入获得各种时区的当前时间。 我知道我可以使用Joda Time ! 但这是唯一的方法吗?

这样做是不是Java中有一个选项? 我尝试了以下代码,它为所有3个sysout提供相同的输出。

Calendar pst = Calendar.getInstance(TimeZone.getTimeZone("PST")); System.out.println("PST " + pst.getTime()); Calendar ist = Calendar.getInstance(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println("IST " + ist.getTime()); Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("Etc/UTC")); System.out.println("UCT " + utc.getTime()); 

我在这里错过了什么来获得其他时区的当前时间?

是的,这会在每种情况下(或相隔毫秒)显示相同的值,因为三个日历都引用同一时刻 (尽管执行时间),这就是java.util.Date代表的全部内容。 这是Calendar.getTime()的结果。

但是, Calendar本身确实知道时区,这将在您使用Calendar.get等时反映出来。当您使用SimpleDateFormat可以使用它,您可以在其中指定特定时区。

 // Specify whatever format you want - bear in mind different locales etc SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); format.setTimeZone(calendar.getTimeZone()); String text = format.format(calendar.getTime()); 

目前还不清楚你要做什么,但基本上你需要知道哪些类型是时区可识别的,哪些不是。 理解java.util.Date没有格式,日历系统或时区是非常重要的:它只是自Unix时代以来的毫秒数。

正如Jon指出的那样,方法getTime()返回一个java.util.Date对象,该对象只是一个毫秒值,而不是时区。

如果您只是在打印时间,那么您可以使用日历并手动获取您想要的字段

 System.out.println(utc.get(Calendar.HOUR_OF_DAY) + ":" + utc.get(Calendar.MINUTE)) 

这需要一些格式,一分钟<10才能显示0