1、String -> Date
NSString *dateStr = @"2022-09-13 00:00:00";
NSDateFormatter*dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];// 代表 2022-09-13 00:00:00 是 Asia/Shanghai 时区的时间
/*
* 如果将手机设置为 Asia/Shanghai 时区,则 date 为 2022-09-13 00:00:00 // 因为和 dateFormatter.timeZone 相同
* 如果本机是 America/New_York 时区(西四区),date 为 2022-09-12 12:00:00(减去 12 个小时)
*/
NSDate *date = [dateFormatter dateFromString:dateStr];
2、Date -> String
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
NSDate *nowDate = [[NSDate alloc] init];// 该方法获取的时间为本机时间,如果在手机的设置上手动调节时间,则下述方法获取的值也会跟着变
/*
* 如果本机是 Asia/Shanghai 时区,则 dateStr 数值和 nowDate 一致
* 如果本机是 America/New_York 时区(西四区),则 dateStr 比 nowDate 大12小时
* 例如:
* nowDate(西四区):Tue Sep 13 03:07:41 2022
* 则dateStr(为东八区,因为dateFormatter的timeZone为Asia/Shangha):“2022-09-13 15:07:41”
* dateStr为dateFormatter对应的timeZone的时间
*/
NSString *dateStr = [dateFormatter stringFromDate:nowDate];
注意:
- NSDate *nowDate = [[NSDate alloc] init]; 获取到的是本机时间,只和本机设置中的时区有关!
- NSDate *date = [dateFormatter dateFromString:dateStr];获取到的是dateFormatter.timeZone时区 -> 本机时区后的时间
- NSString *dateStr = [dateFormatter stringFromDate:nowDate];获取到的是本机时区-> dateFormatter.timeZone时区 后的时间