【问题标题】:NSString to NSDate conversion problem: always the same date!NSString 到 NSDate 的转换问题:总是相同的日期!
【发布时间】:2011-09-30 12:53:50
【问题描述】:

这是我将NSString 解析为NSDate 对象的类方法。代码如下:

+ (NSDate *) stringToDate:(NSString *) string { NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.AAA Z"]; NSDate *date = [dateFormatter dateFromString:string]; NSLog(@"stringToDate(\"%@\") = '%@'", 字符串, 日期); [日期格式化程序发布]; 归期; }

运行它我得到以下输出:

stringToDate("2011-07-07 16:26:07.000 +0200") = '2011-07-06 22:00:00 +0000' stringToDate("2011-07-07 16:26:17.000 +0200") = '2011-07-06 22:00:00 +0000'

...相同的输出!你能帮帮我吗?

【问题讨论】:

  • ... 这就是其他转换发生的情况: stringToDate("2011-06-24 08:00:00.000 +0200") = '2011-06-23 22:00:00 +0000 ' stringToDate("2011-07-24 08:00:00.000 +0200") = '2011-07-23 22:00:00 +0000'
  • 不确定我是否理解您对这个 "stringToDate("2011-06-24 08:00:00.000 +0200") = '2011-06-23 22:00:00 +0000' stringToDate 的问题("2011-07-24 08:00:00.000 +0200") = '2011-07-23 22:00:00 +0000' " 但如果您的问题是无论您传递什么输入字符串,返回日期字符串都是同样...如果是这种情况,请检查以确保您传递的字符串不同。

标签: objective-c datetime


【解决方案1】:

如果我猜对了,您的问题是这两个日期并不完全相同。

如果这是问题,行

[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

对此负责。它将给定的时间对象转换为 GMT+00 时区。

【讨论】:

    【解决方案2】:

    你应该写:

    NSLog(@"stringToDate(\"%@\") = '%@'", string, 
           [dateFormatter stringFromDate:date]);
    

    否则,NSLog 会调用您的 date 对象的 description 方法。以下是文档中关于此方法的说明:

    说明

    返回接收者的字符串表示形式。

    -(NSString *)描述

    返回值

    以国际格式 YYYY-MM-DD HH:MM:SS ±HHMM 表示的接收方字符串,其中 ±HHMM 表示与 GMT 的时区偏移(以小时和分钟为单位)(例如,“2001-03-24 10:45:32 +0600”)。

    如您所见,格式与您使用的格式不完全相同。

    编辑

    尝试将 dateFormatter 的 dateFormat 参数更改为 yyyy-MM-dd HH:mm:ss Z 并使用 [dateFormatter stringFromDate:date] 显示您的日期。

    【讨论】:

    • 其实这就是我的目标。我期待类似的东西: stringToDate("2011-07-07 17:14:40.000 +0200") = '2011-07-07 17:14:40 +0200'
    • 我认为 Tejesh 和我都是对的:您使用的 dateFormatter 正在调整时区,而 description 方法使用的国际格式 - YYYY-MM-DD HH:MM:SS ±HHMM 不会给您您所期望的。查看我的编辑。
    • 我让description 方法在date 对象上被调用。我只是将格式更改为 "yyyy-MM-dd HH:mm:ss.000 Z"(000 而不是 AAA)并且 它可以工作!就我的目标而言,这就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多