iOS笔记(33) 格志周年系列之夏令时(一)

本文仅作为个人学习记录使用,也欢迎在许可协议范围内转载或使用,请尊重版权并且保留原文链接,谢谢您的理解合作。如果您觉得本站对您能有帮助,您可以使用RSS方式订阅本站,这样您将能在第一时间获取本站信息.

开篇扯淡

两月没写blog,没羞没皮了。以后作息规律一些,blog更新还是频繁一些。格志在2014年2月11日就整整上线一周年了。2013一年做格志,由于自己的技术实在比较菜。导致从上线的第一天起,整个团队跟着一直打补丁。小的坑就不说了,大的坑有两,一个iCloud + Core Data世界性难题。一个是全球时间问题。这篇blog就用来专门记下时间的坑。中间还有个插曲——格志在三月上线了2.0的全新专门为iOS 7设计的版本。时间问题在去年10月份改完以为对了就没有改过。结果3月9号是3月的第二个周日,美国地区进入夏令时。格志中又再次发生了时间问题,导致日记显示不全。之前开会说过放错不可怕,可怕的是放同样的错误。再次放错以后我都呆住了。那可是我写过测试用例的啊。结果当时一run测试就挂掉了。瞬间脑子蒙掉。然后上周通宵了一天,基本每天到3点把世界时间问题给彻底搞定。(希望是彻底)所以趁着我现在还有印象,记录一下。

国际化

我们所以会遇到世界时间的问题主要有几个原因:

  1. 格志的定位是一个全球市场的产品
  2. 我们团队(真实情况是我是一个土鳖)并没有很国际化的背景
  3. 格志是一个颗粒度为天的日记应用(Day One等另外几个比较出名的App其实是一个moment为颗粒度)
  4. 格志在设计数据存储的时候用了时间作为日记的唯一标识符号

所以,最初的版本。我是用了一天的00:00:00分来作为日记的时间。

用了这个库

1
2
3
4
https://github.com/erica/NSDate-Extensions

// pod
pod 'NSDate-Extensions', '~> 0.0.1'

里面的这个方法(先贴出来)

1
2
3
4
5
6
7
8
- (NSDate *) dateAtStartOfDay
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
components.hour = 0;
components.minute = 0;
components.second = 0;
return [CURRENT_CALENDAR dateFromComponents:components];
}

来获取每天开始的时间。

然后第一个版本我们就这样欢乐开心的上线了。然后iCloud爆大坑。开始填了2个月的iCloud坑和数据修复。在某个时间,一个中国高富帅用户发Email来说,他去泰国旅游的时候,日记都不见了。我才隐约发觉日记的时间有问题!!

日期出了啥问题?

待续

小结

上周作息实在不规律,现在需要调整一下。本来应该一次性写完发的,但是怕自己懒惰(比如上次的开了头就没有继续,所以我决定每天都写一点就算少一点还是把他发掉)

iOS笔记(33) 格志周年系列之夏令时(一)

https://iiiyu.com/2014/03/18/learning-ios-notes-thirty-three/

Author

Ewan Xiao

Posted on

March 18th 2014

Updated on

September 28th 2023

Licensed under

Comments