将GMT NSDate转换为设备的当前时区

Osc*_*ros 13 iphone objective-c ios parse-platform

我正在使用Parse.com存储一些值:

在此输入图像描述

这些是GMT值.如何将这些转换为设备的当前时区并获得NSDate?

Sam*_*Sam 54

NSDate始终以GMT表示.这就是你如何代表它可能会改变的方式.

如果要打印日期label.text,则使用NSDateFormatter和将其转换为字符串[NSTimeZone localTimeZone],如下所示:

NSString *gmtDateString = @"08/12/2013 21:01";

NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"dd/MM/yyyy HH:mm"];

//Create the date assuming the given string is in GMT
df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *date = [df dateFromString:gmtDateString];

//Create a date string in the local timezone
df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT];
NSString *localDateString = [df stringFromDate:date];
NSLog(@"date = %@", localDateString);

// My local timezone is: Europe/London (GMT+01:00) offset 3600 (Daylight)
// prints out: date = 08/12/2013 22:01
Run Code Online (Sandbox Code Playgroud)

  • 这是'NSDate'根本没有时区(或小时,天等); 他们只是时间点.伦敦人将在下午5:30致电的"NSDate"与加利福尼亚州库比蒂诺上午9:30的"NSDate"完全相同. (4认同)

Sen*_*doa 25

我发现最简单的方法是:

NSDate *someDateInUTC = …;
NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate *dateInLocalTimezone = [someDateInUTC dateByAddingTimeInterval:timeZoneSeconds];
Run Code Online (Sandbox Code Playgroud)

  • 这个概念对我有用,但我必须做以下事情:`[[NSDate alloc] initWithTimeInterval:-timeZoneSeconds sinceDate:someDateInUTC];`(用PST时区测试.) (2认同)
  • 这个逻辑会出现日期观察日光节省的问题 (2认同)

Mar*_*ria 5

这是将NSDate更改为本地时区日期的非常简洁的方法

extension NSDate {

    func toLocalTime() -> NSDate {

        let timeZone = NSTimeZone.local

        let seconds : TimeInterval = Double(timeZone.secondsFromGMT(for:self as Date))

        let localDate = NSDate(timeInterval: seconds, since: self as Date)
        return localDate
    }
}
Run Code Online (Sandbox Code Playgroud)

摘自https://agilewarrior.wordpress.com/2012/06/27/how-to-convert-nsdate-to-different-time-zones/