2013-06-05 104 views
0

我住在印度,格林威治標準時間爲+5.30小時。當我打印系統時間時,它會顯示當前時間。但是當我使用這個代碼時,使用了GMT時間!NSDate返回格林威治標準時間

代碼例如:

NSDate *now = [NSDate date]; 
NSDate *tomorrow = [now dateByAddingTimeInterval:24 * 60 * 60]; 
NSDate *dayaftertomorrow = [now dateByAddingTimeInterval:48 * 60 * 60]; 

NSLog(@"Tomorrow, the date will be %@" , tomorrow); 
NSLog(@"Day after tomorrow, the date will be %@" , dayaftertomorrow); 

系統時間現在是下午11點34分但控制檯打印出:

2013年6月5日23:35:02.577 PROG1 [1601:303]明天,日期將是2013年6月6日18時05分02秒 2013-06 -05 23:35:02.578 prog1 [1601:303]後天,日期將是2013-06-07 18:05:02 +0000

回答

4

創建NSDate對象後,必須使用NSDateFormatter方法stringFromDate:生成本地化到特定時區的日期字符串。如果你剛上的NSDate做直的NSLog()對象,它會顯示的日期爲GMT默認

+2

只是爲了闡明:單獨的NSDate對象代表線性時間中的某個時刻,與任何時區無關。當您打印或以其他方式在某處顯示時,它會打印出某個時區代表那一刻的日期和時間(例如,「格林威治標準時間,即6月6日18:05」)。如果您希望將其打印或顯示在特定時區(包括用戶的時區)中,請使用您設置爲使用該時區的日期格式化程序。 –

2

你可以用一個NSDateFormatter做到這一點:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 

NSLog(@"Now: %@", [dateFormatter stringFromDate:[NSDate date]]); 

其它時區都可以用NSTimeZone這樣被發現:

NSLog(@"Timezones: %@", [NSTimeZone knownTimeZoneNames]); 

希望有所幫助!

+0

非常感謝!乾杯! :) – methi1999

相關問題