iOS开发日记-NSDate/Date的时区问题
2018-12-27 本文已影响72人
Mr_Ten
日常开发中时间应用不可避免,获取时间时因为时区差异总会差那么8个小时。
烦不烦?烦。
奈何?处理下罢了。
何时?马上。
一、OC中的NSDate
1.根据系统Date获取当地Date
-(NSDate *)getLocalDateWithDate:(NSDate *)date {
// 获得系统时区
NSTimeZone *zone = [NSTimeZone systemTimeZone];
//得到源日期与世界标准时间的偏移量
NSInteger interval = [zone secondsFromGMTForDate: date];
//返回以当前NSDate对象为基准,偏移多少秒后得到的新NSDate对象
NSDate *localeDate = [date dateByAddingTimeInterval: interval];
return localeDate;
}
2.根据字符串获取当地Date
-(NSDate *)getLocalDateWithDateStr:(NSString *)dateStr {
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
// 注意的是下面给格式的时候,里面一定要和字符串里面的统一
// 比如: dateStr为2017-07-24 17:38:27 那么必须设置成yyyy-MM-dd HH:mm:ss, 如果你设置成yyyy--MM--dd HH:mm:ss, 那么date就是null, 这是需要注意的
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate * date = [formatter dateFromString:dateStr];
return date;
}
3.根据系统Date获取当地Date的字符串
-(NSString *)getLocalDateStrWithDate:(NSDate *)date {
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
// 下面的格式设置成你想要转化的样子, 2017-07-24 17:47:10
[formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSString * dateStr = [formatter stringFromDate:date];
return dateStr;
}
二、Swift中的Date
1.根据字符串获取当地Date
func getLocalDateWithString(dateStr:String) -> Date {
let formatter = DateFormatter.init();
formatter.dateFormat = "yyyy-MM-dd";
formatter.timeZone = TimeZone.init(secondsFromGMT: 0);
let date = formatter.date(from: dateStr);
return date!;
}
2.根据系统Date获取当地Date
func getLocalWithDate(date:Date) -> Date {
let zone = NSTimeZone.system;
let interval = zone.secondsFromGMT(for: date);
let localDate = date.addingTimeInterval(TimeInterval(interval));
return localDate;
}
3.根据系统Date获取当地Date字符串
func getLocalDateStrWithDate(date:Date) -> String {
let formatter = DateFormatter.init();
formatter.dateFormat = "yyyy-MM-dd";
formatter.timeZone = TimeZone.init(secondsFromGMT: 0);
let dateStr = formatter.string(from: date);
return dateStr;
}
处理了?处理了。
不如喝茶去?走。