我有一個NSDate
(讓我們叫它x
),12 September, 2012 10:18PM (GMT)
。我想在我目前的時區(EST)午夜之前將x
轉換爲一分鐘。因此,在EST
中代表的x代表NSDateFormatter
,轉換後代表12 September, 2012 11:59PM (EST)
。什麼是最好的方法來做到這一點? 謝謝轉換NSDate
轉換NSDate
回答
在NSDateComponents請看下圖:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateComponents_Class/Reference/Reference.html
我相信你需要的的NSDate轉換爲NSDateComponents,設定時間爲11:59 PM,然後再轉換回的NSDate。
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date];
[components setHour:23];
[components setMinute:59];
NSDate *convertedDate = [calendar dateFromComponents:components];
NSLog(@"date=%@, convertedDate=%@", date, convertedDate);
+1,這就是我所說的。只需添加'setTimeZone:'來指定'EST'。 – Mazyod
這是否考慮到localTimezone或僅在參照GMT時將日期轉換爲午夜前一分鐘? – 0xSina
是的,來自http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/DatesAndTimes/Articles/dtTimeZones.html#//apple_ref/doc/uid/20000185-SW1:「默認情況下,NSCalendar使用創建日曆對象時應用程序或進程的默認時區。除非默認時區已被設置,否則它是系統首選項中設置的時區。「 – jrc
這樣的操作可以很容易地用日期的數字表示來完成。在此表示中,您處理自參考日期以來的秒數。
針對timeIntervalSinceReferenceDate
的參考日期爲1月1日st 2001年,格林威治標準時間00:00:00。
NSDate* date = [NSDate date];
NSInteger secondsSinceReferenceDate = [date timeIntervalSinceReferenceDate];
secondsSinceReferenceDate += 86400 - (secondsSinceReferenceDate % 86400);
secondsSinceReferenceDate -= 60;
secondsSinceReferenceDate -= [NSTimeZone.localTimeZone secondsFromGMTForDate:date];
NSDate* justBeforeToday =
[NSDate dateWithTimeIntervalSinceReferenceDate:secondsSinceReferenceDate];
NSLog(@"Date used was %@", date);
NSLog(@"Just before tomorrow is %@", justBeforeToday);
既然有86400秒,每天(24小時時間60分鐘60次60秒= 86400秒),你知道86400 - (secondsSinceReferenceDate % 86400)
是秒數仍有到午夜。因此,如果您拿到今天的日期(或任何其他有效日期),請添加此秒數,然後再減去60秒,您將在格林威治標準時區的今天晚上11:59 PM。
與[NSTimeZone.localTimeZone secondsFromGMTForDate:]
,你知道你的時區偏離GMT時區多少秒。通過將此偏移量減去整數表達式,您可以在當地時區下午11:59時實際獲得該偏移量。
下面是一個示例輸出:
Date used was 2012-09-12 22:37:49 +0000
Just before tomorrow is 2012-09-13 03:59:00 +0000
我在EDT時區太,這看起來像正確答案(記住標準時間爲-5從格林尼治標準時間,但是現在我們是在日光節省,所以它是從格林威治標準時間-4,這是不變的)。
- 1. NSDate轉換
- 2. NSDate在ios轉換
- 3. NSDate to Tick轉換
- 4. 轉換NSDate到NSString
- 5. 轉換:NSString到NSDate
- 6. 轉換AnyObject?到NSDate
- 7. 轉換NSString到NSDate
- 8. nsdate轉換問題
- 9. NSString到NSDate轉換
- 10. 轉換NSString-> NSDate?
- 11. 轉換NSDict到NSDate
- 12. iPhone - NSDate之間的轉換 - NSString - NSDate
- 13. 將NSDate的描述轉換爲NSDate?
- 14. NSString到NSDate轉換錯誤
- 15. 使用NSDateFormatter轉換NSDate
- 16. NSDate轉換NSDateComponents問題
- 17. 轉換NSDate到日期
- 18. 將NSString轉換爲NSDate
- 19. 從NSString問題轉換NSDate
- 20. NSDate沒有正確轉換
- 21. 轉換的NSString的NSDate
- 22. 轉換的NSString的NSDate
- 23. SWIFT將NSTimeInteval轉換爲NSDate
- 24. iphone的NSDate轉換問題
- 25. 將NSDateComponents轉換爲NSDate
- 26. 轉換毫秒的NSDate
- 27. 轉換的NSString的NSDate
- 28. 轉換NSDate到NString問題
- 29. 將NSString轉換爲NSDate
- 30. 從NSDate轉換時區
從我的頭頂,使用'NSDateComponents'對象,它的'TimeZone'到EST和組件設置爲23小時,59分鐘,從作出之日起休息。然後,用'Gregorian'標識符分配'NSCalendar',並得到最終日期:'dateFromComponents:'...或者等待正確的答案:) – Mazyod