应用程序中保存的时间是UTC。应用程序的用户位于不同的时区,例如PST,IST等。
我的问题与this post中的问题非常相似。 我尝试在那里实现一个解决方案,但它似乎对我不起作用:
Calendar calendar = Calendar.getInstance();
calendar.setTime(history.getCreatedTimestamp());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//Here you say to java the initial timezone. This is the secret
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
//Will print in UTC
System.out.println(sdf.format(calendar.getTime()));
//Here you set to your timezone
sdf.setTimeZone(TimeZone.getDefault());
//Will print on your default Timezone
System.out.println(sdf.format(calendar.getTime()));
答案 0 :(得分:3)
我建议您使用Java 8类(SimpleDateFormat
和Calendar
are trouble,如果可能请避免使用它们:
long timestamp = history.getCreatedTimestamp();
// create Instant from timestamp value
Instant instant = Instant.ofEpochMilli(timestamp);
// formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// convert to UTC
System.out.println(formatter.format(instant.atZone(ZoneOffset.UTC)));
// convert to another timezone
System.out.println(formatter.format(instant.atZone(ZoneId.of("America/Los_Angeles"))));
// convert to JVM default timezone
System.out.println(formatter.format(instant.atZone(ZoneId.systemDefault())));
不幸的是,像PST和IST这样的短区域名称不明确(检查this list),因此您需要将它们翻译为IANA's names(这是Java使用的标准,例如America/Los_Angeles
}或Europe/London
)。
有关时区的更多信息:https://codeofmatt.com/2015/02/07/what-is-a-time-zone