簡體   English   中英

使用SimpleDateFormat類Android解析日期

[英]Parsing date with SimpleDateFormat Class Android

我知道這是我將在此描述的非常眾所周知的簡單解決方案。 我正在嘗試解析以下日期格式,但是即使傳遞正確的格式來解析該String,也只會解析異常。

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();
}

此String包含的時區僅引發崩潰。 如果我將其刪除,則可以正確解析它。 因此,時區格式出了點問題,但是即使我嘗試了此鏈接聲明的標准,也是如此: SimpleDateFormat開發人員網站

有人建議我這是怎么了?

謝謝,

到目前為止,從我做過的所有實驗來看,似乎您遇到問題的Android DateFormat解析器實現都不了解GST區域。 最簡單的解決方案是通過將GST替換為GMT + 4來顯式使用格式化程序:

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

使用此日期字符串,Android似乎將返回與桌面等效的相同轉換。

PS(從格式化程序中刪除TimeZone並不是正確的解決方案,因為轉換將不准確。由於您是從Twitter API獲取此日期的,因此在Android上進行格式化之前,您可能需要過濾不可接受的字符串,然后才能使用:

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

在將DateFormat應用於數據之前。

如果您使用英文日期,則將代碼更改為

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

我做的簡單解決方案:

1)從以下格式中將時區作為字符串分開,並替換為“”:

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東西進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM