Java:如何将UTC时间戳转换为本地时间? [英] Java: How do you convert a UTC timestamp to local time?

查看:779
本文介绍了Java:如何将UTC时间戳转换为本地时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆