iOS归纳iOS-Swift

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;
}

处理了?处理了。
不如喝茶去?走。

上一篇下一篇

猜你喜欢

热点阅读