如何将UTC格式的字符串转换为特定时区的日历?

cod*_*joe 3 java timezone date utc gmt

我正在尝试将一些UTC时间的字符串转换为应设置为GMT-5的Java Calendar对象.

我当前的UTC字符串输入是这样的:

UTC日期:20050329174411

我使用这段代码(我检测'pattern'如下所示):

DateFormat dateFormat = new SimpleDateFormat(pattern);
Date date = dateFormat.parse(utcDate);
calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-5"));
calendar.setTime(date);
Run Code Online (Sandbox Code Playgroud)

然后我打印出这样的时间:

calendar.getTime()

我得到了这个结果:

格林威治标准时间:2005年3月29日星期二17:44:11

我需要支持这些日期/时间字符串模式:

FORMAT_UTC4 = "yyyy";           
FORMAT_UTC6 = "yyyyMM";         
FORMAT_UTC8 = "yyyyMMdd";       
FORMAT_UTC10 = "yyyyMMddHH";    
FORMAT_UTC12 = "yyyyMMddHHmm";  
FORMAT_UTC14 = "yyyyMMddHHmmss";
Run Code Online (Sandbox Code Playgroud)

我希望时间设置为"12:44:11".我已经阅读了几个例子,我发现日期时间处理非常令人困惑.对我来说,它总是一样的,我得到一些字符串格式化的UTC,我把它转换为GMT-5.我觉得它应该很容易!

参考1:如何用Java获取UTC或GMT中的当前日期和时间?

参考2:如何使用Java处理日历时区?

JB *_*zet 5

在解析日期之前,必须将SimpleDateFormat的时区设置为UTC.否则,它使用您的默认时区.

要在"GMT-5"时区中显示日期,您应该使用另一个DateFormat,时区设置为GMT-5,并使用此DateFormat格式化日期.toString()Date 的方法使用您的默认时区将日期转换为可读的内容.