Java:如何将UTC时间戳转换为本地时间? [英] Java: How do you convert a UTC timestamp to local time?
问题描述
我有一个UTC时间戳,我想将其转换为本地时间,而不使用像 TimeZone.getTimeZone(PST)
之类的API调用。你应该怎么做呢?我一直使用以下代码没有太多的成功:
private static final SimpleDateFormat mSegmentStartTimeFormat = new SimpleDateFormat(yyyy-MM- dd'T'HH:mm:ss.SSS);
日历calendar = Calendar.getInstance();
try {
calendar.setTime(mSegmentStartTimeFormatter.parse(startTime));
}
catch(ParseException e){
e.printStackTrace();
}
return calendar.getTimeInMillis();
样本输入值: [2012-08-15T22:56:02.038Z ]
应该返回相当于 [2012-08-15T15:56:02.038Z]
日期
没有时区和内部存储在UTC 。仅当格式化日期时才适用时区校正。当使用 DateFormat
时,它默认为运行的JVM的时区。使用 setTimeZone
根据需要进行更改。
DateFormat utcFormat = new SimpleDateFormat(yyyy-MM-dd'THH:mm:ss.SSS'Z );
utcFormat.setTimeZone(TimeZone.getTimeZone(UTC));
日期date = utcFormat.parse(2012-08-15T22:56:02.038Z);
DateFormat pstFormat = new SimpleDateFormat(yyyy-MM-dd'THH:mm:ss.SSS);
pstFormat.setTimeZone(TimeZone.getTimeZone(PST));
System.out.println(pstFormat.format(date));
打印 2012-08-15T15:56:02.038
请注意,我忽略了PST格式的'Z'
,表示UTC。如果你刚刚使用 Z
,那么输出将是 2012-08-15T15:56:02.038-0700
p>
I have a timestamp that's in UTC and I want to convert it to local time without using an API call like TimeZone.getTimeZone("PST")
. How exactly are you supposed to do this? I've been using the following code without much success:
private static final SimpleDateFormat mSegmentStartTimeFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(mSegmentStartTimeFormatter.parse(startTime));
}
catch (ParseException e) {
e.printStackTrace();
}
return calendar.getTimeInMillis();
Sample input value: [2012-08-15T22:56:02.038Z]
should return the equivalent of [2012-08-15T15:56:02.038Z]
Date
has no timezone and internally stores in UTC. Only when a date is formatted is the timezone correction applies. When using a DateFormat
, it defaults to the timezone of the JVM it's running in. Use setTimeZone
to change it as necessary.
DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = utcFormat.parse("2012-08-15T22:56:02.038Z");
DateFormat pstFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
pstFormat.setTimeZone(TimeZone.getTimeZone("PST"));
System.out.println(pstFormat.format(date));
This prints 2012-08-15T15:56:02.038
Note that I left out the 'Z'
in the PST format as it indicates UTC. If you just went with Z
then the output would be 2012-08-15T15:56:02.038-0700
这篇关于Java:如何将UTC时间戳转换为本地时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!