我从我的数据库返回一个字符串,值为'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小时但我想保持不变。 希望我有意义
答案 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
。