【发布时间】:2015-09-23 19:33:17
【问题描述】:
我有一个移动应用程序,它通过电话号码对用户进行身份验证(类似于 Whatsapp 的登录过程)。
用户登录后,可以创建一个TODO笔记。当他创建笔记时,他还填写了日期。
在数据库中,我想将此日期标准化为 UTC。
例如,如果用户填写日期:06/07/2015 17:00:00
他所在国家/地区的 UTC 偏移量为 +3
然后 06/07/2015 14:00:00 将保存在数据库中。
为此,我需要知道用户所在国家/地区的 UTC 偏移量。
当用户注册时,他提供的仅有的两件事是:
- 国家代码
- 电话号码
这些不足以知道 UTC 偏移量,因为输入美国国家代码的用户仍然可能处于多个不同的时区。
我也在使用libphonenumber 来解析上面提到的传入值,但它无法得到我想要的偏移量。
如何解决? (Viber、Line 和 Whatsapp 等其他应用如何处理这种情况?)
【问题讨论】:
-
为什么不能从设备本身获取时区?
-
你不能,尤其是手机号码。手机号码没有按地理位置分配。此外,号码可携带性意味着您甚至无法通过号码检测运营商
-
移动应用程序使用设备的时区信息和/或位置。他们不会试图从数字中猜测。
-
@AdrianWragg 我会说位置到时区相当简单,一个网络服务调用,请参阅stackoverflow.com/questions/16086962/… 以获得合适的列表。
-
如果您有应用程序 - 我认为没有一种语言不支持将时间转换为 UTC。在客户端上执行 local->UTC 是您拥有的最佳选择(并且不需要获取时区,当您将其发送到服务器时会更加痛苦)。
标签: c# timezone utc gmt libphonenumber