美文网首页
iOS 时间戳在不同时区转换问题

iOS 时间戳在不同时区转换问题

作者: 哇哇卡 | 来源:发表于2022-05-20 11:21 被阅读0次

    一、给定一个10位时间戳,转成不同时区的日期

    //给定一个时间戳

    NSString *test = @"1652861974”;

    //转成北京时区下的日期

    NSDateFormatter *beijingFormatter = [[NSDateFormatter alloc] init];

    [beijingFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone *beijingZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];

    [beijingFormatter setTimeZone:beijingZone];

    //转成手机系统设置的时区(纽约)下的日期

    NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init];

    [localFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSTimeZone *localZone = [NSTimeZone systemTimeZone];//当前手机设置的是纽约时区

    [localFormatter setTimeZone:localZone];

     NSDate* testDate = [NSDate dateWithTimeIntervalSince1970:[test longLongValue]];

    NSString* beijingDateString = [beijingFormatter stringFromDate: testDate];//北京时区下的日期字符串:“2022-05-18 16:19:34”

    NSString* localTimeString = [localFormatter stringFromDate: testDate];//换成本地(纽约)时间:2022-05-18 04:19:34

    NSLog(@"服务器返回北京时间:%@ 转换成本地时区时间:%@ ", beijingDateString, localTimeString);

    结果打印:服务器返回北京时间:2022-05-18 16:19:34 转换成本地时区时间:2022-05-18 04:19:34

    二、反向验证同一时刻下世界在不同时区的日期返回的时间戳是相同的:

    北京时区日期:2022-05-18 16:19:34以上的beijingDateString对应的

    纽约时区日期:2022-05-18 04:19:34(以上的localTimeString对应的

    NSDate *beiDate = [beijingFormatter dateFromString: beijingDateString];

    NSTimeIntervalbeiInterval = [beiDate   timeIntervalSince1970];

    NSDate*LocDate = [localFormatter   dateFromString: localTimeString];

    NSTimeIntervalLocInterval = [LocDate  timeIntervalSince1970];

    NSLog(@"原始时间戳:%@ 北京时区生成时间戳:%f  本地时区生成时间戳:%f ",test,(double)beiInterval,(double) LocInterval);

    结果打印: 原始时间戳:1652861974  北京时区生成时间戳:1652861974.000000   本地时区生成时间戳:1652861974.000000 

    验证了同一时刻虽然处于世界不同时区,但是拿到的时间戳是一样的,前提是转成对应时区下的日期即NSDateFormatter要设置对应的时区。

    相关文章

      网友评论

          本文标题:iOS 时间戳在不同时区转换问题

          本文链接:https://www.haomeiwen.com/subject/yilfprtx.html