2016-05-31 46 views
0

我在我的viewController默認位置,UIDataPicker當我的用戶完成選擇日期運行此代碼:NSDateFormatterLongStyle字符串的NSDate

NSString *dateString = [NSDateFormatter localizedStringFromDate:[self.dataPicker date] 
                  dateStyle:NSDateFormatterLongStyle 
                timeStyle:NSDateFormatterNoStyle]; 

與該代碼我可以存儲在以下格式的日期:

2016年5月31日

在我的代碼之後,我需要這個字符串轉換成真正的日期格式,爲了這個,我用鱈魚e如下:

-(NSDate*)convertStringToDate:(NSString*)date{ 
    NSString *dateString = date; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    [dateFormatter setDateFormat:@"MM/dd/yyyy"]; 

    return [dateFormatter dateFromString:dateString]; 
} 

但是這段代碼返回一個空值。由於日期選擇器默認設置,我的系統可以接收任何日期格式,但最終我希望它被轉換爲en_us格式。

我該如何解決這個問題?

+0

請參見本教程:HTTPS: //iosdevcenters.blogspot.com/2016/03/nsdateformatter-in-swift.html –

+0

'2016年5月31日'vs'MM/dd/yyyy'您是否看到相同的格式?格式「MM/dd/yyyy」與字符串格式不匹配(2016年5月31日)。 – Larme

+0

@Larme,我明白了...現在讓我們將設備的語言更改爲法語,格式將與2016年5月31日不同,我認爲我需要將日期轉換爲語言環境... – Lacrifilm

回答

2

不要將日期存儲爲字符串;從某個參考日期以秒爲單位將其存儲爲偏移量。

即:

uint64_t offset = (uint64_t)[[self.dataPicker date] timeIntervalSinceReferenceDate]; 
// store this 64-bit unsigned integer. 

這需要更少的空間並更快轉換到/從一個NSDate對象。

您可以將偏移爲NSTimeInterval(64位浮點double)如果你喜歡,但你不存儲日期&時間,uint64_t應該做的......

1

格式化字符串取決於您使用的語言環境。從localizedStringFromDate文檔:格式化的 當前語言環境的給定日期的

返回字符串表示使用指定的日期和時間樣式。

此方法使用配置了當前默認值 設置的日期格式化程序。返回的字符串是一樣的,如果你配置和 用作以下示例所示日期格式:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.formatterBehavior = NSDateFormatterBehavior10_4; 
formatter.dateStyle = dateStyle; formatter.timeStyle = timeStyle; 
NSString *result = [formatter stringForObjectValue:date]; 

意味着,你應該做下:

-(NSDate*)convertStringToDate:(NSString*)dateString { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.formatterBehavior = NSDateFormatterBehavior10_4; 
    dateFormatter.dateStyle = NSDateFormatterLongStyle; 
    dateFormatter.timeStyle = NSDateFormatterNoStyle; 
    return [dateFormatter dateFromString:dateString]; 
} 
+1

'MM'應該對應'05',而不是'May',否? – Larme

+1

對,現在如果我的用戶正在使用我的應用程序與不同的位置?像法國人,日本人,葡萄牙人......這段代碼可以處理? (一旦我的選擇器被設置爲默認) – Lacrifilm

+0

是的,格式化字符串應該取決於你用來創建日期的地區。相應地更新解決方案。 – sgl0v

1

使用此代碼,

-(NSDate*)convertStringToDate:(NSString*)date{ 
    NSString *dateString = date; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    [dateFormatter setDateFormat:@"MMM d, yyyy"]; 

    return [dateFormatter dateFromString:dateString]; 
} 

希望它有幫助