使用 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 内容进行转换。
我知道对于我将在此处描述的问题,这是众所周知且简单的解决方案。我正在尝试解析以下日期格式,但即使传递正确的格式来解析该字符串,也会出现解析异常。
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 内容进行转换。