Java 将字符串时间戳调整为GMT

Java 将字符串时间戳调整为GMT,java,Java,我有一个带有本地时间的字符串: "2012-12-12T08:26:51+000" 我现在需要基于旧的字符串创建一个字符串,该字符串使用GMT时间。例如,假设本地和GTM之间相差2小时: "2012-12-12T10:26:51+000" 我已经创建了一个SimpleDateFormat: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+SSSS"); dateFormat.setTimeZ

我有一个带有本地时间的
字符串

"2012-12-12T08:26:51+000"
我现在需要基于旧的
字符串创建一个
字符串
,该字符串使用GMT时间。例如,假设本地和GTM之间相差2小时:

"2012-12-12T10:26:51+000"
我已经创建了一个
SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+SSSS"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String time = dateFormat.parse(mCreatedTime).toString();
但是
time
字符串现在的格式不同:

Wed Dec 12 etc
如何使输出的格式为
yyy-MM-dd'HH:MM:ss+SSSS
但不是GMT时间?

dateFormat.parse()
方法返回一个日期实例,当您在其上调用
toString()
时,日期将以默认区域设置打印出来


使用
dateFormat.format()
将日期值恢复到所需的格式。

正如我对这个问题的评论所表明的那样,我认为这个问题的原始海报对于日期时间工作是混淆和错误的。尽管如此,我还是编写了一些示例代码,完全满足Pierre的要求,并警告他正在遵循一些非常糟糕的做法

使用JodaTime2.3库和Java7

/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
//注意:该问题专门针对此处使用的格式提出。
//但这种格式错误地使用加号表示毫秒,而不是UTC/GMT的偏移量。
//做一件非常糟糕的事。会造成无尽的混乱。
//另一个坏处是:这段代码创建了表示不同时区的日期时间的字符串,但没有指明它们在不同的时区。
//时区列表:http://joda-time.sourceforge.net/timezones.html
//“大西洋/南乔治亚”是比UTC晚两小时的时区。
DateTimeZone southGeorgiaZone=DateTimeZone.forID(“大西洋/南乔治亚”);
DateTimeFormatter formatter=DateTimeFormat.forPattern(“yyyy-MM-dd'HH:MM:ss+SSS”);
DateTime dateTimeInSouthGeorgia=格式化程序.withZone(southGeorgiaZone).parseDateTime(“2012-12-12T08:26:51+000”);
DateTime dateTimeInUtc=dateTimeInSouthGeorgia.toDateTime(DateTimeZone.UTC);
String screwyBadPracticeDateTimeString=formatter.print(dateTimeInUtc);
System.out.println(“2012-12-12T08:26:51+000在南乔治亚州DateTime:+DateTime在南乔治亚州”);
System.out.println(“相同,以UTC为单位:+dateTimeInUtc”);
System.out.println(“screwyBadPracticeDateTimeString:+screwyBadPracticeDateTimeString”);
当运行时

2012-12-12T08:26:51+000南乔治亚州日期时间:2012-12-12T08:26:51.000-02:00
相同,UTC:2012-12-12T10:26:51.000Z
螺丝钉ADPracticeDateTimeString:2012-12-12T10:26:51+000

您是否尝试过时区的
Z
?我认为
+SSSS
不会做你认为的事情。@PeterLawrey。谢谢,我试试看。你说2012-12-12T08:26:51+000是你的当地时间,但GMT的偏移量是+000。也许你的意思是+0200?字符串的格式似乎有问题。显然,您的意思是“+000”表示毫秒(假设您在格式字符串中使用SSS)。但“+”加号通常表示与UTC/GMT的偏移量。问题中的另一个错误:以毫秒为单位显示3位零,但以字符串格式显示4个字符的“SSS”。谢谢。这正是我想要的。