服务端信息: API Server: Rails 5 and PostgreSQL IOS:  SQLite3

问题:  时间查询问题.

需求:获取更新文章计数然后把新更新的数据同步到IOS,所以我们将最新文章的更新时间到同步到IOS中.  然后IOS通过发送此时间到API Server, 继而检测服务器端是否有新数据更新. 然而服务器端当无文章更新时, 我们API总是给我们返回 (1).


具体示例代码如下:


pry(main)> updated_at = Article.order('updated_at DESC').first.updated_at
=> Sun, 03 Dec 2017 03:41:07 UTC +00:00
pry(main)> date_str = updated_at.to_s
=> "2017-12-03 03:41:07 UTC"
pry(main)> date = Time.parse(date_str)
=> 2017-12-03 03:41:07 UTC
pry(main)> Article.where('updated_at > ?', date).count
=> 1


最后发现这个问题就是因为在PostgreSQL中updated_at 它是一个带毫秒的时间,然而我们发送给IOS端是一个datetime时间,只能到秒。所以就会出现此问题.


pry(main)> updated_at.round(10).iso8601(6)
=> "2017-12-03T03:41:07.122390Z"


最后的解决方案:

1. 在API端给起始查询时间 +1 second

2. API端返回带毫秒格式的日期,IOS再次请求更新数据时,将其返回