【问题标题】:Dateformatter gives wrong time on conversation [duplicate]Dateformatter在对话中给出错误的时间[重复]
【发布时间】:2014-01-11 08:25:28
【问题描述】:

我正在尝试将我的日期字符串转换为 NSDate,但它返回正确的日期和错误的时间。

这是我的代码:

    NSString *dateStr = @"2013-12-20 12:10:40";

    // Convert string to date object
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

    NSLog(@"lastUpdatedate : %@",lastUpdatedate);

它返回这个:

lastUpdatedate : 2013-12-20 06:40:40 +0000

【问题讨论】:

  • 时间是24小时制还是12小时制??
  • 然后会建议您将日期转换为字符串并检查日志...

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

- [NSDate description](在将其传递给NSLog 时调用)始终以 GMT 时区而不是您的本地时区打印日期对象。如果您想要日期的准确字符串表示,请使用日期格式化程序根据您的时区创建正确的字符串。

【讨论】:

    【解决方案2】:
    NSString *dateStr = @"2013-12-20 12:10:40";
    NSDateFormatter *dateFormatterTest = [[NSDateFormatter alloc] init];
    [dateFormatterTest setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    [dateFormatterTest setLocale:[NSLocale currentLocale]];
    NSDate *d = [dateFormatterTest dateFromString:dateStr];
    

    在你的代码中设置 NSLocale,你会得到完美的结果。

    【讨论】:

    • 默认locale是当前locale,没用。
    • 问题不在于他没有设置语言环境。问题是他没有使用日期格式化程序。
    【解决方案3】:

    你可以试试这个:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    
    NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];
    
    NSTimeInterval sourceGMTOffset = [[NSTimeZone systemTimeZone] secondsFromGMTForDate:lastUpdatedate];
    
    lastUpdatedate = [lastUpdatedate dateByAddingTimeInterval:sourceGMTOffset];
    
    NSLog(@"lastUpdatedate : %@",lastUpdatedate);
    

    【讨论】:

    • 这修改了解析后的NSDate对象,不正确。
    • @LeoNatan 我没听懂你。请多指教。
    【解决方案4】:

    正如@Leo Natan 所说,- [NSDate description] 总是在 GMT 时区给出日期。如果要转换为本地时区,请使用以下代码。

    NSString *dateStr = @"2013-12-20 12:10:40";
    
    // Convert string to date object
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];
    
    NSLog(@"lastUpdatedate : %@",[self getLocalTime:lastUpdatedate]);
    
    
    
    -(NSDate *) getLocalTime:(NSDate *)date {
        NSTimeZone *tz = [NSTimeZone defaultTimeZone];
        NSInteger seconds = [tz secondsFromGMTForDate: date];
        return [NSDate dateWithTimeInterval: seconds sinceDate: date];
    }
    

    输出:

    最后更新日期:2013-12-20 12:10:40 +0000

    【讨论】:

    • 如何仅获得 12:10:40(不是像 2013-12-20 12:10:40 +0000 这样的整个日期)和 24 小时格式?
    • @natasha HH:mm:ss 将在 24 小时内给出数据格式,而 hh:mm:ss 将在 12 小时内给出数据格式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多