【问题标题】:Unable to convert string date with GMT for Nsdate无法使用 GMT 为 Nsdate 转换字符串日期
【发布时间】:2014-01-06 13:14:17
【问题描述】:

我有一个类似下面例子的字符串

2013-12-28T8:15:00+03:00

但我想转换为相同格式的 NSDate 这是我的代码

NSDateFormatter *dateFormatterInBoundSegment = [[NSDateFormatter alloc] init];

[dateFormatterInBoundSegment setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];

[dateFormatterInBoundSegment setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

NSDate *dateInboundSegment = [dateFormatterInBoundSegment dateFromString:@"2013-12-28T8:15:00+03:00"];

NSLog(@"Formatted date %@",dateInboundSegment); 

结果是这样打印的

Formatted date 2013-12-28 05:15:00 +0000

我想用 GMT +3 之类的字符串转换成 nsdate,结果应该是这样的

2013-12-28T8:15:00+03:00

【问题讨论】:

  • 那么为什么要将它设置为 UTC 呢?

标签: ios nsdate nsdateformatter nstimezone nslocale


【解决方案1】:

NSDate 不存储时区,NSDate 只是一个代表日期的数字。当你在屏幕上打印它时,它只是这样格式化,但你的日期和那个是一样的。

这个:

2013-12-28 05:15:00 +0000

还有这个:

2013-12-28T8:15:00+03:00

表示相同的日期,只是以不同的方式打印。

当你这样做时:NSLog(@"Formatted date %@",dateInboundSegment); 你没有指定如何将日期格式化为字符串,所以它使用默认模式。

如果要打印带有正确时区的 NSDate,则需要使用格式化程序创建一个字符串并设置时区。

【讨论】:

【解决方案2】:

您打印的是NSDate 值,而不是格式化的字符串。 NSDate 不包含任何格式,使用默认格式打印。

为了以您想要的格式打印字符串,您必须调用:

[dateFormatterInBoundSegment stringFromDate:myDate];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多