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
我 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