使用 NSDateFormatter 转换后的时间变化

time change after converting using NSDateFormatter

我正在尝试将字符串转换为日期。它工作正常,但时间与字符串不同。这是我的示例代码:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss a"];
[dateFormat setTimeZone:[NSTimeZone defaultTimeZone]];
[dateFormat setLocale:[NSLocale currentLocale]];
NSDate *date = [dateFormat dateFromString:@"2015-03-09 07:40:00 pm"];
NSLog(@"%@", date);

而且,输出是 2015-03-09 08:16:43.794 testAlarm[1091:40476] 2015-03-09 10:40:00 +0000 注意小时是 10 但在字符串中小时是 07

时间是使用您当地的时区读取的,显示的 NSDate 使用 UTC 时间(在不使用特定日期格式器时总是如此

你明确告诉它使用本地时区

[dateFormat setTimeZone:[NSTimeZone defaultTimeZone]]; //!

虽然 NSDate 本身是一个没有任何时区概念的时间戳

=> 使用正确的日期格式化程序打印它。只是记录它总是不使用时区=> UTC


#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
        [dateFormat setTimeZone:[NSTimeZone defaultTimeZone]];
        [dateFormat setLocale:[NSLocale currentLocale]];

        NSString *input = @"2015-03-09 07:40:00 pm";
        NSLog(@"%@", input); //local timezone
        NSDate *date = [dateFormat dateFromString:input];
        NSLog(@"%@", date); //utc!
        NSString *str = [dateFormat stringFromDate:date];
        NSLog(@"%@", str); //local timezone

    }
}