2013-07-11 67 views
4

我正在像這樣獲取日期字符串表單郵件服務器。星期四,2009年12月31日14時32分15秒+0580。
我想將此日期字符串轉換爲日期。如何將郵件服務器日期字符串轉換爲nsdate

這裏是我的代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 
    NSString *[email protected]"Mon, 3 sep 2012 08:32:39 +0580"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"]; 
    [dateFormatter setLenient:YES]; 
    NSLocale *enUS = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]; 
    [dateFormatter setLocale:enUS]; 
    NSDate *result = [dateFormatter dateFromString:inputstring]; 
    NSLog(@"test==%@",result); 
} 

我正在輸出空。

除外輸出:2012-09-03 3時02分39秒+0000

回答

2

第一個問題:您沒有嘗試讀取字符串上的「Tue」。 (將「EEE」添加到格式的前面)

第二個和更大的問題:+0580不是有效的時區。幾年前有一個PHP錯誤,錯誤地將IST(+0530)返回爲+0580。 +0580沒有意義。這意味着5小時80分鐘。因此,您可以執行以下兩項操作之一:在處理之前使用+0530替換+0580 將日期格式化程序時區設置爲IST,並從字符串中除去+0580。

我看到你接受了另一個答案,但該答案「有效」,因爲它無法解析最後部分並忽略時區。我跑,並得到2013年7月9日8時32分38秒+0000(這是不一樣的2013年7月9日8時32分39秒0580

刪除在該+接受的答案格式會導致格式化程序正確解析,但由於時區無效,您將得到null。更改時區到+0530給出預期的結果2013-07-09 03:02:39 +0000

+1

Thanku爲您的迴應...但我不能更改日期字符串,因爲我從郵件服務器得到該字符串... – iosLearner

+0

我的意思是改變它*後*你收到它。 – borrrden

+0

Yah iam試試那個,但我沒有得到,如果你不介意可以發佈這個樣本代碼 – iosLearner

1

更換

[dateFormatter setDateFormat:@"d MMM yyyy HH:mm:ss ZZZ"];

[dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss zzzz"];

1

只需複製並粘貼下面的代碼在您的項目中運行,查看結果

NSString *dateString = @"Tue, 9 Jul 2013 08:32:39 +0580"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, dd MM yyyy hh:mm:ss +zzzz"]; 
NSDate *dateFromString; 
dateFromString = [dateFormatter dateFromString:dateString]; 

NSLog(@"test==%@",dateFromString); 
+0

使用'alloc'不需要'NSDate * dateFromString'的分配,因爲它已經通過'dateFromString:'分配了內存。所以我編輯了你的答案。 –

+0

雖然這會忽略時區。結果對我來說是** 2013-07-09 08:32:38 + 0000 **時區是這裏的大問題。 – borrrden

+0

我的輸入字符串是「Tue,2013年7月9日08:32:39 +0580」,我想出nsdate這樣的2013-07-09 03:02:39 +0000 ...我怎麼能? – iosLearner

1

@Raviteja Kammila使用以下代碼的日期格式,如2013-07-09 03:02:39 +0000

NSString *dateString = @"Tue, 9 Jul 2013 08:32:39 +0580"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MM yyyy HH:mm:ss +zzzz"]; 
    NSDate *date = [dateFormatter dateFromString:dateString]; 
    NSLog(@"final date : %@",date); 
+0

它得到的輸出:2013-07-09 08:32:38 +0000但我想2013-07-09 03:02:39 +0000 – iosLearner

+0

這個答案從字面上剛剛從以前的答案改變爲HH ...你可以拋出任何你喜歡的字符串解析格式,但*它不是一個有效的字符串* – borrrden

+0

@borrrden:你可以更新我有效的字符串。 –

相關問題