我正在尝试将字符串转换为日期。它工作正常,但小时与字符串不同。这是我的示例代码:
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
答案 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
}
}