从NSDate获取正确日期的问题

时间:2013-01-28 09:27:11

标签: ios date nsdate nsdateformatter

NSDate我遇到了一些问题。

我的代码如下:

NSDate *date    = [NSDate dateWithTimeIntervalSinceNow:logout];

当我将断点放在此代码上并将鼠标移动时,它显示为

2013-01-28 18:25:27 SGT

NSLog日期

我明白了:

2013-01-28 10:25:27

为什么会这样?怎么显示正确的?

3 个答案:

答案 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);