簡體   English   中英

NSDate格式和值的奇怪行為

[英]NSDate format and value strange behavior

我有以下代碼:

NSDateFormatter * df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setFormatterBehavior:NSDateFormatterBehaviorDefault];

myres.start_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]];
    NSLog(@"Start date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"start_time"]]);
    NSLog(@"Start date from NSDate is %@", myres.start_date);
    myres.end_date = [df dateFromString:[NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]];
    NSLog(@"End date is %@", [NSString stringWithFormat:@"%@ %@", [self.data objectForKey:@"date"], [self.data objectForKey:@"end_time"]]);
    NSLog(@"End date from NSDate is %@", myres.end_date);

我得到的結果是:

Start date is 2011-03-31 9:00:00
Start date from NSDate is 2011-03-31 16:00:00 +0000
End date is 2011-03-31 10:00:00
End date from NSDate is 2011-03-31 17:00:00 +0000

為什么結果不同? 我想擁有它,以便當我調用myres.start_date描述時,它為我提供與字符串相同的數據。

結果有所不同,因為您正在使用通用description方法打印NSDate實例,該方法與您期望的輸出格式不匹配。

如果使用[df stringFromDate:myres.start_date] ,則應獲得相同的輸出。

請記住, NSDate存儲時間表示形式 ,並且有很多打印時間的方式, description的打印時間方式是固定的。

description NSDate以所需格式返回字符串的唯一方法是使用類別覆蓋它或使用子類。

您似乎對時間的存儲和顯示方式有一個基本的誤解:您的NSDate正在存儲由NSDateFormatter解析的時間,並且實際上它在其description方法中返回了相同的數據 它只是以其他形式顯示

日期格式器將時區考慮在內。 直接使用日期時,只得到它的描述,這顯然是祖魯時間。

暫無
暫無

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

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