使用 SimpleDateFormat 解析日期 Class Android

Parsing date with SimpleDateFormat Class Android

我知道对于我将在此处描述的问题,这是众所周知且简单的解决方案。我正在尝试解析以下日期格式,但即使传递正确的格式来解析该字符串,也会出现解析异常。

try{
  String mDateFormat = "Tue Nov 03 13:46:28 GST 2015";
  SimpleDateFormat mFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
  Date mFormattedDate = mFormat.parse(mDateFormat);

  }catch(ParseException e){
     e.printStackTrace();
}

此字符串中包含的时区仅引发崩溃。如果我将其删除,它就能正确解析它。所以时区格式有问题,但即使我尝试了这个 link 声明的标准: SimpleDateFormat By Developer Site

有人告诉我这里有什么问题吗?

谢谢,

如果您使用的是英文日期,请将代码更改为

SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ENGLISH);

从我目前所做的所有实验来看,您发现问题的 Android DateFormat 解析器实现似乎不理解 GST 区。最简单的解决方案是通过将 GST 替换为 GMT+4 来显式使用格式化程序:

String mDateFormat = "Tue Nov 03 13:46:28 GMT+4 2015";

使用此日期字符串,Android 似乎返回与桌面等效项相同的转换。

P.S(从格式化程序中删除时区不是正确的解决方案,因为转换不会准确。由于您是从 Twitter API 获取此日期,您可能需要过滤在 Android 上格式化之前不可接受的字符串,您可以使用:

mDateFormat.replace("GST", "GMT+4") 

在将 DateFormat 应用于数据之前。

我所做的简单解决方案:

1) 将 Timezone as String 从以下格式中分离出来并替换为 "" :

String mDateFormat = "Tue Nov 03 13:46:28 GST 2015";
String mTimeZone = mDateFormat.substring(20,23);
String mActualDate = mDateFormat.replace(mTimeZone + " ", "");

2) 在应用 SimpleDateFormat 时获取默认时区并设置相同的时区

final String TWITTER = "EEE MMM dd HH:mm:ss yyyy";
SimpleDateFormat mSf = new SimpleDateFormat(TWITTER, Locale.ENGLISH);
mSf.setTimeZone(TimeZone.getDefault());
Date mNewDate = sf.parse(mActualDate);

3) 获取具有相同时区的更新日期。无需使用 GMT 内容进行转换。