将 PST 中的日期与时间转换为 UTC 格式

Posted

技术标签:

【中文标题】将 PST 中的日期与时间转换为 UTC 格式【英文标题】:Converting Date with Time in PST into UTC format 【发布时间】:2013-12-07 07:54:02 【问题描述】:

我有一个变量 str(字符串类型),其值为“28-Nov-2013 09:15 AM”。如何将其转换为 UTC 格式(上述 str 变量中的时间是 PST,因此是 UTC应该比这多 8 小时)。我正在使用 flex 2。在下面找到下面的代码不起作用:-

 txtDate.text= formatDateUTC(txtDate.text); //here txtDate.text=28-Nov-2013 09:15 AM

    private function formatDateUTC(originalDate:String):String
    
        Alert.show('original '+originalDate);
        var dtValue:Date = new Date(Date.parse(originalDate.replace("-"," ")));
        var editedDate:String=pstFormatter.format(dtValue);
        Alert.show('edited '+editedDate);


        return (dateFormatter.format(dateAdd("hours",8,dtValue))).toString();

    
    private function dateAdd(datepart:String = "", number:Number = 0, date:Date = null):Date
            
        if (date == null) 
            date = new Date();
        

        var returnDate:Date = new Date(date);;

        switch (datepart.toLowerCase()) 
            case "fullyear":
            case "month":
            case "date":
            case "hours":
            case "minutes":
            case "seconds":
            case "milliseconds":
                returnDate[datepart] += number;
                break;
            default:
                /* Unknown date part, do nothing. */
                break;
        
       return returnDate;
    

【问题讨论】:

【参考方案1】:

聪明的程序员将繁重的日期时间计算留给专门的库。在 Java 中,这将是 Joda-Time(或在 Java 8 中,JSR 310)。

这是 Java 7 中 Joda-Time 2.3 的示例代码。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

String dateString = "28-Nov-2013 09:15 AM"; // Assumed to be the local date-time in United States west coast.
//String dateString = "28-Nov-2013 09:15 PM";  // Test "PM" as well as "AM" if you like.

// Joda-Time has deprecated use of 3-letter time zone codes because of their inconsistency. Use other identifier for zone.
// Time Zone list: http://joda-time.sourceforge.net/timezones.html
org.joda.time.DateTimeZone californiaTimeZone = org.joda.time.DateTimeZone.forID( "America/Los_Angeles" );

// Joda-Time formatting codes: http://www.joda.org/joda-time/key_format.html
org.joda.time.format.DateTimeFormatter dateStringFormat = org.joda.time.format.DateTimeFormat.forPattern( "dd-MMM-yyyy hh:mm aa" ).withZone( californiaTimeZone );

org.joda.time.DateTime californiaDateTime = dateStringFormat.parseDateTime( dateString );
org.joda.time.DateTime utcDateTime = californiaDateTime.toDateTime( org.joda.time.DateTimeZone.UTC );

// Both of these date-time objects represent the same moment in the time-line of the Universe, 
// but presented with different time-zone offsets.
System.out.println( "californiaDateTime: " + californiaDateTime );
System.out.println( "utcDateTime: " + utcDateTime );

运行时……

californiaDateTime: 2013-11-28T09:15:00.000-08:00
utcDateTime: 2013-11-28T17:15:00.000Z

【讨论】:

感谢 Basil,如果 dateString = "28-Nov-2013 09:15 AM" 但如果 dateString = "28-Nov-2013 09:15 PM" 则运行良好,那么它给出的是 "2013- 11-28T17:15:00.000Z”,其中预期答案是“2013-11-29T05:15:00.000Z”,即日期不变 @user3005581 您在我的格式化程序模式模板中发现了一个错误。我在时间中使用了大写的“HH”,意思是“解释为 24 小时制”。我在另一个问题Why does Joda time change the PM in my input string to AM? 中找到了这个诊断。我现在将修复我的示例代码。

以上是关于将 PST 中的日期与时间转换为 UTC 格式的主要内容,如果未能解决你的问题,请参考以下文章

将 PDT/PST 时区列转换为 UTC 时区

将UTC时间转换为PST以获得夏令时?

是否有根据日期转换为 PST 或 PDT 的 SQL 函数?

查询 Django 模型时,如何将 Django 中的 DateTimeField 从 UTC 转换为最终用户的时区(通常是 PST)?

iOS日期转换之UTC/GMT时间格式

将时区偏移量(ISO 8601 格式)添加到原始日期时间