【发布时间】:2018-01-14 22:49:43
【问题描述】:
我有特定的情况,我必须获取日期字段,将其转换为 GMT 时间,然后将其转换为特定的字符串格式。
这给出了 GMT 时间:
public static void main(String[] args) {
Date rightNow = Calendar.getInstance().getTime();
DateFormat gmtFormat = new SimpleDateFormat();
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
gmtFormat.setTimeZone(gmtTime);
System.out.println("GMT Time: " + gmtFormat.format(rightNow));
String gmtDate=gmtFormat.format(rightNow);
}
现在我需要将该 GMT 时间转换为字符串格式 yyyy-MM-ddTHH:mm:ssZ
我所在时区的当前时间示例为17:10:00,格林威治标准时间为15:10:00,因此这意味着最终输出应为2017-08-07T15:10:00Z
我尝试使用此代码添加:
String pattern = "yyyy-MM-ddTHH:mm:ssZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(gmtDate);
System.out.println(date);
当然我得到了异常,因为字符串不能像这样转换,但我需要类似的东西。
【问题讨论】:
-
您有使用旧的日期/时间 API 吗? java.time 包要好得多。除此之外,尚不清楚您遇到了什么异常或在哪里......
-
嗨,我在这一行遇到异常: SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);线程“主”java.lang.IllegalArgumentException 中的此异常:java.text.SimpleDateFormat.compile(Unknown Source) at java.text.SimpleDateFormat.initialize(Unknown Source) 处的非法模式字符 'T'
-
对,那你调查过吗?基本上你的模式被打破了——你需要引用
T和Z。 -
正确的模式,如副本中完整的工作示例所示是
public static final String ISO_8601_24H_FULL_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";,根据ISO_8601#Combined_date_and_time_representations。 不要按照其他人的建议在末尾硬编码Z。