美文网首页日常开发
iOS/macOS 开发时,处理时间,如果遇到夏令时改怎么办?

iOS/macOS 开发时,处理时间,如果遇到夏令时改怎么办?

作者: 包砸豆沙馅 | 来源:发表于2019-10-28 16:15 被阅读0次

    今天是28号,在27号凌晨两点钟的时候 执行夏令时的地区,已经将时钟调整 慢了一个小时,以此来结束夏令时,有关夏令时的内容介绍,请自行百度。

    今天技术支持反馈了个时间的问题,在课表中显示了两个27号的时间。在接到问题之后,没有什么思路,因为之前一直运行ok 没什么问题。但是仔细想了一下,刚开始做课表的时候,考虑过国外的夏令时,会不会就是这个问题呢。 然后就开始在代码中 将要计算时间的时间戳给打印出来 发现这一周的第一天 时间戳为: 1572152400 第二天的时间戳为:1572238800  并没有什么大问题。但是 调整一下自己的系统时区,将时区调整为墨西哥城,然后在时间戳转换工具里面 转换一下时间戳 发现,这两个时间戳显示的年月日 竟然都是2019年10月27号!区别是差了11个小时,但是时间戳是相差12个小时。这个要怎么解决呢?

    还好苹果爸爸给咱们提供了很全面的API,我们可以获取daylightSavingOffSet,然后去调整一下时间戳,算出给出时间的日期就OK了。具体代码如下:

    获取给定时间戳的工作日:

      NSDate*temDate=[NSDate dateWithTimeIntervalSince1970:timeInterval];

        NSTimeInterval daylightSavingInterval = [[NSTimeZone systemTimeZone] daylightSavingTimeOffsetForDate:temDate];

        NSLog(@"daylightSavingInterval : %f", daylightSavingInterval);

        NSDate* date = [NSDate dateWithTimeIntervalSince1970:timeInterval - daylightSavingInterval];

        NSCalendar*gregorian = [NSCalendar currentCalendar];

        NSDateComponents*weekdayComponents = [gregoriancomponents:NSCalendarUnitWeekday fromDate:date];

        NSUInteger weekDayInteger = (NSUInteger)[weekdayComponentsweekday];

    获取日期的代码类似。

    相关文章

      网友评论

        本文标题:iOS/macOS 开发时,处理时间,如果遇到夏令时改怎么办?

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