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

Ana*_*rai 1 java timezone calendar

我正在寻找一种方法来根据用户输入获得各种时区的当前时间.我知道我可以使用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());
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 6

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

但是,它Calendar本身确实知道时区,并且会在您使用时反映出来Calendar.get.当您使用a时,可以使用它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());
Run Code Online (Sandbox Code Playgroud)

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

  • @AnanthChelladurai:所以使用`SimpleDateFormat`,就像我在原来的答案中所说的那样.我将编辑答案来证明这一点. (3认同)