簡體   English   中英

[NSDate date]是否返回本地日期和時間?

[英]Does [NSDate date] return the local date and time?

我傻了嗎? 一直以來我都認為[NSDate date]返回了當地的日期和時間。 今天在NSStringformatter / stringFromdate / dateFromString遇到麻煩后,我發現我的[NSDate日期]正在返回2011-03-06 11:00:00 +0000。 研究完之后,我看到[NSDate date]返回一個始終為GMT的原始日期。

如果gmt偏移部分總是顯示+0000,那么它的用途是什么? 另外我不明白[myDate說明]。 文檔說它應該顯示gmt偏移量和dst信息。 我得到與[NSDate日期]相同的東西。

最重要的是,如果我使用[NSDate日期]來獲取當前日期,那么它是在下午2點之后我得到明天的日期,因為我在-10時區。 更不用說我今天遇到的NSDateformatter問題。

我看到了嗎? 有趣的是我似乎記得看到[NSDate日期]返回2011-03-06 11:00:00 -36000,或者我認為我看到2011-03-06 11:00:00 -10000。

我可以使用它,但也許有人可以解釋這一點,以幫助我更好地理解NSDate。

NSDate返回當前日期。 雖然它可以在不同的語言環境/時區中轉換為字符串格式,但NSDate沒有時區的內部概念。 NSDates不受任何特定區域的約束。 如果您和世界上的任何其他人同時詢問您的設備[NSDate日期],您將得到相同的結果 - 不是因為它總是以GMT返回,而是因為它不以特定於時區的方式返回。 在可可,約會是地球歷史上的一個特定時刻。 如何撰寫日期與您的日歷,時區和區域設置有關。

你沒有得到明天的約會,你得到了正確的日期,然后注意到如果用格林威治標准時間表示它會給出不同的一天。 這是正確的日期,只是寫得與你想要的不同。

'description'是從NSObject重寫的方法。 當您對NSLog一個對象時,內部發生的是調用description方法並打印返回的字符串。 所以你應該從日志object[object description]得到相同的結果,因為前者調用描述並打印該字符串,后者調用description然后調用結果字符串上的描述並打印出來。 NSStrings作為描述的結果返回自己。

它應該是默認行為,但要獲得有意義的描述,請嘗試:

NSLog(@"%@", [[NSDate date] descriptionWithCalendarFormat:nil 
           timeZone:[NSTimeZone localTimeZone] locale:[NSLocale currentLocale]]);

如果仍然以GMT登錄,則您的設備認為自己處於GMT狀態。 我不知道模擬器對於那種東西有多可靠。

Swift中

NSDate()為我們提供了一個不可知日期的描述,它總是返回UTC + 0日期時間,與設備的時區無關:

print(NSDate())

.descriptionWithLocale(NSLocale.currentLocale())! 給我們一個本地化的日期描述UTC + N日期時間,其中N代表UTC + 0和當前本地日期時間之間的偏移(正或負):

print(NSDate().descriptionWithLocale(NSLocale.currentLocale())!)

暫無
暫無

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

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