我有一个变量str(字符串类型)有“28-Nov-2013 09:15 AM”作为其值。如何将其转换为UTC格式(上面提到的str变量时间是在PST中,因此UTC应该是8小时以上)。我正在使用flex 2.Find下面的代码是以下代码: -
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;
}
答案 0 :(得分:2)
聪明的程序员将繁重的日期时间计算留给专门的库。在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