将UTC日期转换为12小时本地日期?

时间:2019-11-29 15:20:28

标签: ios objective-c cocoa-touch nsdate nsdateformatter

我的日期和时间是20-Nov-2019 21:09,采用UTC 24小时格式。现在我想在12小时内将其转换为当地时间。 2019年11月30日08:00像这样。

我的代码是:

Reason: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/XXXX/jobs: Access Denied: Project XXXX: User does not have bigquery.jobs.create permission in project XXXX.\n\n(job ID: XXXX-XX-XX-XX-XXXX)\n\n

我将本地时间12点发送给UTC 24小时时的代码

// create dateFormatter with UTC time format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

// change to a readable time format and change to local time zone
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm a"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *timestamp = [dateFormatter stringFromDate:date];

1 个答案:

答案 0 :(得分:0)

我认为您做得太多了。格式“ hh”是12小时格式的小时,HH是24小时格式。您不必为此设置区域设置(尽管将en_US_POSIX设置为可以避免[NSLocale currentLocale]实例中用户的24小时偏好设置,该实例可以覆盖iOS上的设置)。

NSDate是时间上的绝对实例。您需要使用带有NSDateFormatter的日历和时区来获取数字的年/月/日等值,但是您无需将偏移量调整为参考日期(即更改实际日期,而不是只需在其他时区重新格式化。

NSString *utcString = @"20-Nov-2019 21:09";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"dd-MMM-yyyy HH:mm";

NSDate *date = [formatter dateFromString:utcString];

formatter.timeZone = [NSTimeZone localTimeZone]; // GMT-5 for me
formatter.dateFormat = @"dd-MMM-yyyy hh:mm a";
NSLog(@"date: %@", [formatter stringFromDate:date]);
// date: 20-Nov-2019 04:09 PM