我有一個日期,2010-08-23 13:30:00 -0400
,我試圖在UTC +2時區中獲取它。秒的差異是21600,但是當我撥打[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
時,我得到2010-08-24 01:30:00 +0200
,應該是2010-08-23 19:30:00 +0200
。任何想法我做錯了什麼?使用initWithTimeInterval獲取錯誤日期:sinceDate:
回答
日期對象代表特定的時刻,不管當時可能有哪些不同的人的時鐘。
當你想顯示日期時,你會通常顯示用戶的時鐘會說的(或正在說或將要說的)時區。這正是當你在一個NSDate中使用NSLog
時發生的情況:日期的描述就是你當地時區所代表的時刻。
添加到NSDate或從NSDate中減去不是時區轉換。加減法產生代表其他時刻的NSDates;在你的情況下,你創建一個NSDate的時刻,從你開始的那一刻起6個小時,而不是在地球另一側的同一時刻。
爲了簡化,時區轉化是在空間看着同時在不同點(地球表面的不同部分),而日期加減是計算不同時間。
對於NSDate,沒有時區轉換,因爲它不在開始的時區。只有格式化該時區的日期時纔會涉及時區。因此,要在其他時區顯示該日期,請執行此操作。通常,這意味着將您想要的時區提供給您的date formatter。
我看到你回來的日期有不同的時區+200
而不是-400
。如果您注意到,您會看到該結果恰好比原始日期晚12小時(或6小時+ 6小時)。當你做出新的約會時,你是否偶然改變了語言環境?當您進行的變更開始給您+200
而不是-400
時,系統會自動調整補償時間,然後您再添加6小時到日期。 NSDate將自2001年1月1日以來的所有日期存儲爲一個時間間隔,並根據需要調整時區。
不,我沒有改變它。但我認爲彼得霍西解釋了什麼是錯的。不管怎麼說,還是要謝謝你。 – Collin 2010-08-23 19:51:04
真的嗎?那麼爲什麼會有不同的時區偏移量,以及您沒有添加的額外6小時來自哪裏? – theMikeSwan 2010-08-23 19:54:03
theMikeSwan:我的猜測是他解析了包含-0400時區偏移量的日期字符串,然後進行了添加,然後使用NSLog記錄了結果,NSLog使用了他的本地時區(恰好是所需的目標時區) 。時區轉換加上他添加的6小時,佔了12個小時。 – 2010-08-23 20:10:43
- 1. 使用XMLGregorianCalender獲取錯誤日期
- 2. 在使用日期選取器時得到錯誤的日期
- 3. 獲取2日期之間的日期列表有錯誤
- 4. 使用BeautifulSoup獲取日期
- 5. 日期錯誤使用笨
- 6. 錯誤日期選取器
- 7. 使用星期幾獲取日期
- 8. 使用星期幾獲取日期
- 9. 月份日曆提取錯誤日期?
- 10. 錯誤獲取星期幾
- 11. 用虛擬機在php中獲取錯誤日期
- 12. 獲取日期
- 13. 獲取日期
- 14. 使用httr獲取錯誤401獲取
- 15. 使用Linq按日期獲取數據
- 16. 使用C從DateTime獲取日期#
- 17. 獲取日期的差異,使用GETDATE()
- 18. 使用日期時間獲取結果
- 19. 使用Jquery獲取日期和月份
- 20. 使用Databinding時從getTimeInMillis獲取日期
- 21. 如何使用sqldf獲取日期?
- 22. 如何使用JavaScript獲取UTC日期?
- 23. 使用java.sql.Date時獲取日期爲空
- 24. 使用時區獲取日期javascript
- 25. 使用Java獲取域失效日期
- 26. 使用T-SQL獲取日期時間?
- 27. 使用SimpleDateFormat獲取當前日期
- 28. 使用javascript獲取日期字段值
- 29. 獲取錯誤使用HashSet
- 30. 獲取錯誤,使用.NET
嗯,你完全正確。我正在改變時間,而不是空間的角度。 – Collin 2010-08-23 19:50:13