【问题标题】:Date is getting changed while converting to NSDate from NSString从 NSString 转换为 NSDate 时日期发生变化
【发布时间】:2011-04-18 05:58:27
【问题描述】:

我在 NSDateFormatter 的帮助下将 NSString 转换为 NSDate。现在代码在所有带有设备和模拟器的操作系统中都可以正常工作,但它在英国、美国地区创建了不同的输出。这是我正在使用的代码。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

实际日期为:2010-09-05 04:00:00

美国输出:2010-09-04 21:00:00 -0700

似乎问题出在 TimeZone/Locale 某处,但不知道解决方案。 我也试过了:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

但无法摆脱问题。

是否有任何简单的方法可以从 NSString 获取 NSDate 作为字符串实际表示的,而不会受到 TimeZone 的影响。我只想获得 NSDate,因为它出现在 NSString 中,日期和时间没有变化。有什么办法吗? 提前致谢。

【问题讨论】:

  • 您是否在创建 dateObj 之前设置了时区?
  • 是的。我已经设置了 [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];首先然后使用 dateFormatter 将 NSString 转换为 NSDate

标签: iphone nsdate nsdateformatter


【解决方案1】:

这取决于您如何再次输出日期。如果您使用的是 NSDateFormatter,您将得到相同的结果。如果您只是通过调用[date description] 输出日期,则输出会有所不同,因为包含有关本地时区的信息。

正确的用法是:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

NSString* finalDateString =  [dateFormatter stringFromDate:dateObj];
[dateFormatter release];

输出:

2010-09-05 04:00:00

我已经在几个时区测试了这段代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2019-07-30
    • 2011-11-25
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多