Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从NSDate获取正确日期的问题_Ios_Date_Nsdate_Nsdateformatter - Fatal编程技术网

Ios 从NSDate获取正确日期的问题

Ios 从NSDate获取正确日期的问题,ios,date,nsdate,nsdateformatter,Ios,Date,Nsdate,Nsdateformatter,我对NSDate有一些问题 我的代码如下所示: NSDate *date = [NSDate dateWithTimeIntervalSinceNow:logout]; 当我将断点放在这段代码上并将鼠标移到上面时,它显示为 2013-01-28 18:25:27 SGT 但是当NSLog日期 我明白了: 2013-01-28 10:25:27 为什么会这样?如何显示正确的日期?NSDate定义了一个对象,该对象表示具有特定属性(如时区)的日期。如果希望显示日期,可以选择仅显示年份,可

我对NSDate有一些问题

我的代码如下所示:

NSDate *date    = [NSDate dateWithTimeIntervalSinceNow:logout];
当我将断点放在这段代码上并将鼠标移到上面时,它显示为

2013-01-28 18:25:27 SGT
但是当
NSLog
日期

我明白了:

2013-01-28 10:25:27

为什么会这样?如何显示正确的日期?

NSDate定义了一个对象,该对象表示具有特定属性(如时区)的日期。如果希望显示日期,可以选择仅显示年份,可能仅显示小时和分钟(所有这些都可以使用
NSDateFormatter
类完成)。您所做的是在LLDB上打印对象-这可能会显示日期的UTC版本,因此我对同一实例的调试器摘要显示不同的时间并不感到惊讶


确定需要对此日期执行的操作,相应地设置其时区,格式化并在控制台中打印出来。

NSDate定义了一个对象,该对象表示具有特定属性的日期(例如时区)。如果希望显示日期,可以选择仅显示年份,可能仅显示小时和分钟(所有这些都可以使用
NSDateFormatter
类完成)。您所做的是在LLDB上打印对象-这可能会显示日期的UTC版本,因此我对同一实例的调试器摘要显示不同的时间并不感到惊讶


决定您需要如何处理此日期,相应地设置其时区,格式化并在控制台中打印出来。

此问题只是因为NSDate是一个“原始”日期。这就是为什么它是在格林尼治标准时间

你可以试试这个

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];

这将为您提供当前时区

这个问题只是因为NSDate是一个“原始”日期。这就是为什么它是在格林尼治标准时间

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);
你可以试试这个

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];

这将为您提供当前时区

我说的lldb版本代码也将在设备中使用对吗?此外,您如何使用TimeIntervalsInnow:logout]设置NSDate Date的时区;我说的lldb版本代码也将在设备中使用对吗?此外,您如何设置NSDate DATE WITH TIMEINTERVALSENOW:logout]的时区;您来自新加坡及其格林尼治时间+8.00小时!!你的位置很重要你怎么改变它?需要一些指导…你来自新加坡,并且它的GMT+8.00小时!!你的位置很重要你怎么改变它?需要一些指导。。。
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);