SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'");
String oldDate = "2012-09-20T09:37:33.000Z";
Date date;
try {
date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
新浪微博返回的時間都是,帶有時區的GMT時間,平時使用慣了中國的時間表示格式,GMT時間轉換一時無從下手。找了好一會兒,終於找到了對應的時間格式化字符串:
對應:
EEE MMM d HH:mm:ss Z yyyy
Java例子
// TODO Auto-generated method stub
SimpleDateFormat format = new SimpleDateFormat(
"EEE MMM d HH:mm:ss Z yyyy",Locale.US);
SimpleDateFormat format2 = new SimpleDateFormat(
"EEE MMM d HH:mm:ss Z yyyy",Locale.CHINA);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd hh:mm:ss");
System.out.println(format.format(new Date()));
try {
System.out.println(format1.format(format2
.parse("星期四 九月 20 16:18:39 +0800 2012")));
System.out.println(format1.format(format
.parse("Thu Sep 20 15:42:06 +0800 2012")));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ios解析補充:
如果你在iOS中解析新浪微博的日期格式,只是設置NSDateFormatter實例的dateFormat屬性為上面的格式化字符串。在模擬器(前提是模擬器的“設置”->“多語言環境”->“英國/美國”)下是能夠實現解析的,但是在真機調試時,卻無法解析。
那是因為在中國地區的,操作系統的環境一般都是“中國”、“中國香港”、“中國澳門等”,而上面的這種格式化字符串只針對英文操作系統的環境下才有效。
所以為了保證在任何設置下都能解析,我們需要對NSDateFormatter實例的locale屬性進行設置(強制采用“en-US”的方式進行轉換):
示例:
- //解析新浪微博中的日期
- + (NSString*)resolveSinaWeiboDate:(NSString*)date{
- NSDateFormatter *iosDateFormater=[[[NSDateFormatter alloc]init]autorelease];
- iosDateFormater.dateFormat=@"EEE MMM d HH:mm:ss Z yyyy";
- //必須設置,否則無法解析
- iosDateFormater.locale=[[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]autorelease];
- NSDate *date=[iosDateFormater dateFromString:date];
- //目的格式
- NSDateFormatter *resultFormatter=[[[NSDateFormatter alloc]init]autorelease];
- [resultFormatter setDateFormat:@"MM月dd日 HH:mm"];
- return [GlobalInstance NSDateToNSString:date withFormatter:resultFormatter];
- }