在java里面,如何得到UTC时间, 时间格式为:Tue Oct 12 00:00:00 UTC 0800 2010

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java里面,如何得到UTC时间, 时间格式为:Tue Oct 12 00:00:00 UTC 0800 2010相关的知识,希望对你有一定的参考价值。

要时间格式为 Tue Oct 12 00:00:00 UTC 0800 2010 的,不是要毫秒的
是java的,不是js的. 我已经黔驴技穷了

Calendar gc = GregorianCalendar.getInstance();
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
//之后调用cal.get(int x)或cal.getTimeInMillis()方法所取得的时间即是UTC标准时间。
System.out.println("UTC:"+new Date(cal.getTimeInMillis()));

赠送其它时间方法,总有一款适合您
public static void main(String[] args)
SimpleDateFormat foo = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("foo:"+foo.format(new Date()));

Calendar gc = GregorianCalendar.getInstance();
System.out.println("gc.getTime():"+gc.getTime());
System.out.println("gc.getTimeInMillis():"+new Date(gc.getTimeInMillis()));

//当前系统默认时区的时间:
Calendar calendar=new GregorianCalendar();
System.out.print("时区:"+calendar.getTimeZone().getID()+" ");
System.out.println("时间:"+calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE));
//美国洛杉矶时区
TimeZone tz=TimeZone.getTimeZone("America/Los_Angeles");
//时区转换
calendar.setTimeZone(tz);
System.out.print("时区:"+calendar.getTimeZone().getID()+" ");
System.out.println("时间:"+calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE));
Date time=new Date();

//1、取得本地时间:
java.util.Calendar cal = java.util.Calendar.getInstance();

//2、取得时间偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);

//3、取得夏令时差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);

//4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));

//之后调用cal.get(int x)或cal.getTimeInMillis()方法所取得的时间即是UTC标准时间。
System.out.println("UTC:"+new Date(cal.getTimeInMillis()));

Calendar calendar1 = Calendar.getInstance();
TimeZone tztz = TimeZone.getTimeZone("GMT");
calendar1.setTimeZone(tztz);
System.out.println(calendar.getTime());
System.out.println(calendar.getTimeInMillis());



运算结果是Tue Oct 19 16:54:57 CST 2010 符合你的要求
只是以毫秒来算的
参考技术A 你的0800表示的是时区,也有这样的
(new Date()).toUTCString()
我问了几个人,他们都说是js的

Java:如何将 UTC 时间戳转换为本地时间?

【中文标题】Java:如何将 UTC 时间戳转换为本地时间?【英文标题】:Java: How do you convert a UTC timestamp to local time? 【发布时间】:2012-09-11 07:32:25 【问题描述】:

我有一个 UTC 时间戳,我想将其转换为本地时间,而不使用像 TimeZone.getTimeZone("PST") 这样的 API 调用。你到底应该怎么做?我一直在使用以下代码,但没有取得多大成功:

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();

示例输入值:[2012-08-15T22:56:02.038Z]

应该返回相当于[2012-08-15T15:56:02.038Z]

【问题讨论】:

【参考方案1】:

Date 没有时区,内部存储为 UTC。只有当日期被格式化时,时区更正才适用。使用DateFormat 时,它默认为其运行所在的JVM 的时区。根据需要使用setTimeZone 进行更改。

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));

这打印2012-08-15T15:56:02.038

请注意,我在 PST 格式中省略了 'Z',因为它表示 UTC。如果您只是使用Z,那么输出将是2012-08-15T15:56:02.038-0700

【讨论】:

酷,它确实有效。我可以通过调用 TimeZone.getDefault() 来获取 Android 设备的默认时区。 没有变化,和UTC时间一样,怎么办?【参考方案2】:

这是一个简单修改的​​解决方案

    public String convertToCurrentTimeZone(String Date) 
            String converted_date = "";
            try 

                DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

                Date date = utcFormat.parse(Date);

                DateFormat currentTFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                currentTFormat.setTimeZone(TimeZone.getTimeZone(getCurrentTimeZone()));

                converted_date =  currentTFormat.format(date);
            catch (Exception e) e.printStackTrace();

            return converted_date;
    


    //get the current time zone

    public String getCurrentTimeZone()
            TimeZone tz = Calendar.getInstance().getTimeZone();
            System.out.println(tz.getDisplayName());
            return tz.getID();
    

【讨论】:

【参考方案3】:

使用现代 Java 日期和时间 API,这很简单:

    String inputValue = "2012-08-15T22:56:02.038Z";
    Instant timestamp = Instant.parse(inputValue);
    ZonedDateTime losAngelesTime = timestamp.atZone(ZoneId.of("America/Los_Angeles"));
    System.out.println(losAngelesTime);

打印出来

2012-08-15T15:56:02.038-07:00[America/Los_Angeles]

注意事项:

您的期望中有一个小错误。时间戳中的Z 表示UTC,也称为祖鲁时间。因此,在您的本地时间值中,Z 不应该存在。相反,您需要一个返回值,例如 2012-08-15T15:56:02.038-07:00,因为偏移量现在是 -7 小时而不是 Z。 避免使用三个字母的时区缩写。它们不是标准化的,因此通常是模棱两可的。例如,PST 可能表示菲律宾标准时间、太平洋标准时间或皮特凯恩标准时间(尽管缩写中的 S 通常表示夏令时(表示 DST))。如果您打算使用太平洋标准时间,那甚至不是时区,因为在夏季(您的示例时间戳所在的位置)使用的是太平洋夏令时间。在我的代码中,使用 region/city 格式的时区 ID 而不是缩写。 时间戳通常最好作为Instant 对象处理。仅在需要时转换为 ZonedDateTime,例如用于演示。

问题:我可以在我的 Java 版本中使用现代 API 吗?

如果至少使用 Java 6,则可以。

在 Java 8 及更高版本中内置了新的 API。 在 Java 6 和 7 中获得 the ThreeTen Backport,这是新类的后向端口(对于 JSR-310 来说是 ThreeTen,现代 API 是首次定义的地方)。 在 Android 上,使用 ThreeTen Backport 的 Android 版本。叫ThreeTenABP,我觉得this question: How to use ThreeTenABP in Android Project有很好的解释。

【讨论】:

以上是关于在java里面,如何得到UTC时间, 时间格式为:Tue Oct 12 00:00:00 UTC 0800 2010的主要内容,如果未能解决你的问题,请参考以下文章

强制 Java 时区为 GMT/UTC

JAVA UTC时间格式转换

java中utc时间怎么转换为本地时间?

如何使用Robot + Linux在json文件中以UTC(Zulu UTC)格式替换当前时间?

如何将 UTC 转换为 IST 时间格式 [重复]

从UTC转换为任何时区