【问题标题】:Why is NSDateFormatter returning a date that is off by one hour?为什么 NSDateFormatter 返回一个相差一小时的日期?
【发布时间】:2012-04-21 23:15:20
【问题描述】:

我在 PDT(太平洋夏令时),比 UTC 晚 -0700 小时。我正在使用NSDateFormatter 解析一个时间字符串,下午 4:00,然后创建一个日期:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
NSDate *aDate = [[NSDate alloc] init];
[df setDateFormat:@"h:mm a"];
aDate = [df dateFromString:@"4:00 PM"];

aDate 返回为:1970-01-02 00:00:00 +0000。但是,我希望它会返回:1970-01-01 23:00:00 +0000,因为下午 4 点应该是 23:00 UTC。

检查日期格式化程序时区会返回正确的 (PDT) 时区,即:America/xxx (PDT) offset -25200 (Daylight)

有人知道这里发生了什么吗?提前感谢您的帮助...

【问题讨论】:

    标签: objective-c ios nsdateformatter


    【解决方案1】:

    如果不指定日期,您将使用 PST,而不是 PDT。再试一次:

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"EEE, d LLL yyyy hh:mm a"];
    NSDate *aDate = [df dateFromString:@"Sat, 21 Apr 2012 04:00 PM"];
    NSLog(@"date=%@", aDate);
    

    【讨论】:

    • 以上代码返回:2012-04-21 19:00:00 +0000。 19:00:00 是晚上 7 点,我无法解释这是如何计算的。
    • 7 - 7 = 0. 运行它,其中 sourceDate = aDate; stackoverflow.com/questions/4547379/….
    • danh 我不明白你的评论。 7-7=0?
    • @JakeV - 天哪,当我回答时我以为我明白了(1900 是晚上 7 点,负 7 是 12:00),但也许那是深夜 (PDT) 脑放屁。现在我也很困惑。让我考虑一下,然后回复你。
    • 将“HH”更改为“hh”,因为您使用的是 12 小时制。
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多