NSDate
我遇到了一些问题。
我的代码如下:
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:logout];
当我将断点放在此代码上并将鼠标移动时,它显示为
2013-01-28 18:25:27 SGT
但NSLog
日期
我明白了:
2013-01-28 10:25:27
为什么会这样?怎么显示正确的?
答案 0 :(得分:2)
这个问题只是因为 NSDate是一个“原始”日期。这就是为什么它在GMT
你可以试试这个,
NSDate* sourceDate = [NSDate dateWithTimeIntervalSinceNow:logout];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
这将为您提供当前时区
答案 1 :(得分:1)
NSDate定义一个对象,该对象表示具有某些属性(例如时区)的日期。如果您希望显示日期,您可以选择仅显示年份,也可以仅显示小时和分钟(所有这些都可以使用NSDateFormatter
类完成)。您正在做的是在LLDB上打印对象 - 这可能显示日期的UTC版本,因此我对同一实例的调试器摘要显示不同的时间并不感到惊讶。
决定你需要对这个日期做些什么,相应地设置它的时区,格式化它并在你的控制台中打印出来。
答案 2 :(得分:0)
Try this it works!!
NSDate *localDate =[NSDate date]; // get the date
NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone] secondsFromGMT];
NSTimeInterval gmtTimeInterval = [localDate timeIntervalSinceReferenceDate] + timeZoneOffset;
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval];
NSLog(@"%@",gmtDate);