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

时间:2016-04-27 13:26:03

标签: objective-c nsdate

我从我的数据库返回一个字符串,值为'04 / 27/2016 1:16 pm'。该值已经是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 = 2016/4/27 2:10:33 PM,duploadtime = 2016-04-27 12:10:33 +0000

基本上时间回到1小时但我想保持不变。 希望我有意义

2 个答案:

答案 0 :(得分:3)

Proper String Format对于日期来说是最重要的。

有些方法可以采用HOURS格式,如下所示:

kk:将在(01-24)小时内返回24格式小时(看起来像01,02..24)。

HH将在(00-23)小时内返回24格式小时(看起来像00,01..23)。

hh将返回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

答案 1 :(得分:1)

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

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

HH表示使用24小时格式。但是你也用a表示AM / PM。使用这两者会使格式化程序混乱并让您逐个使用。你打算在这里使用hh