objective c 将字符串转换为 UTC - 时间移动错误

objective c convert string to UTC- the time is moving in error

我 return 我的数据库中的一个字符串,值为 '04/27/2016 1:16pm'。此值已采用 UTC。

现在我想将该字符串转换为 NSDATE,并以 UTC 格式保存。当我尝试将字符串转换为日期时,时间实际上移动了 1 小时。

我就是这样做的

NSString *tuploadtime = [tempDictionary valueForKey:@"uploadTime"];

    //date conversions
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MM-dd-yyyy HH:mm:ss a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

    NSDate *duploadtime = [[NSDate alloc] init];
    duploadtime = [dateFormatter dateFromString:tuploadtime];

    NSLog(@"tuploadtime=%@, duploadtime=%@", tuploadtime, duploadtime);

结果返回时间为 2016-04-27 12:16:01 UTC。 结果是

2016-04-27 10:12:44.612 x[1558:48608] tuploadtime=4/27/2016 2:10:33 PM, duploadtime=2016-04-27 12:10:33 +0000

基本上时间倒退了 1 小时,但我想保持不变。 希望我说得有道理

您的日期格式字符串不一致:

[dateFormatter setDateFormat:@"MM-dd-yyyy HH:mm:ss a"];

HH表示使用24小时格式。但是后来你也用了a来表示AM/PM。两者都使用会使格式化程序感到困惑,并给你一个差错。您打算在此处使用 hh

Proper String Format 因为日期是最重要的。

有一些方法可以使 HOURS 格式如下,它们的区别如下..

kk:将 return 24 小时格式 (01-24) 小时将(看起来像 01、02..24)。

HH 将 return 24 格式小时 (00-23) 小时将(看起来像 00、01..23)。

hh 将 return 12 格式小时(看起来像 01、02..12)。

所以你应该使用你的代码

NSString *tuploadtime = [tempDictionary valueForKey:@"uploadTime"];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM-dd-yyyy hh:mm:ss a"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSDate *duploadtime = [[NSDate alloc] init];
duploadtime = [dateFormatter dateFromString:tuploadtime];

NSLog(@"tuploadtime=%@, duploadtime=%@", tuploadtime, duploadtime);

有关更多日期格式,请参阅此 link