【问题标题】:NSDateFormatter is giving one day ahead date [duplicate]NSDateFormatter 提前一天提供日期[重复]
【发布时间】:2014-02-22 17:15:45
【问题描述】:

我正在使用下面的代码,但它给了我提前一天的日期。

示例:将输入字符串传递为“2013-08-31T23:59:59-0400”,输出日期为“2013-09 -01 03:59:59 +0000”。

NSDateFormatter *formatter = [self railsDateFormatter];
NSDate *date = [formatter dateFromString:dateString];

+(NSDateFormatter*)railsDateFormatter
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZ"];
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    [formatter setLocale:locale];
    return formatter;
}

谢谢。

【问题讨论】:

  • 您似乎没有提前 1 天,更像是提前了 4 小时。输出时的日期是怎么格式化的?
  • 线索是字符串末尾的时区偏移量,第一个是-0400(落后4小时),第二个是+0000(落后0小时)。您已将本地设置为en_US_POSIX,这改变了您的时区。完全没有问题
  • 如果你不知道YYYY和yyyy的区别,你应该使用yyyy。但这只会打破 1 月 1 日附近的日期。

标签: ios iphone objective-c


【解决方案1】:

这可能与 TimeZone 问题有关 - 您的日期是 UTC 还是您的本地时间?相应地设置 dateFormatter 的时区

【讨论】:

  • 这不正确。输入字符串包含一个显式时区“-0400”,对应于“Z”格式,因此setTimeZone: 对字符串到日期的转换没有影响。
  • ah - 好的解析是正确的,但不超过时区,但他似乎在原始时区再次输出日期 - 因此他必须为 outputtin 设置时区
【解决方案2】:

您好,由于时区差异,请正确设置时区

-(NSDate *)convertDateFromString:(NSString *)strDate DateFormat:(NSString *)strDateFromat
{
    strDateFromat=@"yyyy-MM-dd'T'HH:mm:ss";

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //chirag::In date day is displayed one less so it can print exact date
    formatter.timeZone = [NSTimeZone timeZoneWithAbbreviation: @"GMT"];
    [formatter setDateFormat:strDateFromat];

    NSDate *currentYearDate = [formatter dateFromString:strDate];

    return currentYearDate;
}

【讨论】:

    【解决方案3】:

    这是一个时区问题。设置 DateFormatter 对象的时区。

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

    【讨论】:

    • 这不正确。输入字符串包含一个显式时区“-0400”,对应于“Z”格式,因此setTimeZone: 对字符串到日期的转换没有影响。
    猜你喜欢
    • 2021-05-06
    • 2016-08-22
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2012-01-21
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多