使用NSDateFormatter进行转换后的时间更改

时间:2015-03-09 09:20:23

标签: objective-c nsdate 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

1 个答案:

答案 0 :(得分:0)

使用您当地的时区读取时间,显示的NSDate使用UTC时间(就像不使用特定日期格式器时一样;

明确告诉它使用本地时区

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

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

=>使用适当的日期格式化程序进行打印。只记录它将始终使用no timezone => 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

    }
}