Flutter获取当前所在的时区
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter获取当前所在的时区相关的知识,希望对你有一定的参考价值。
参考技术A 使用 DateTime 的 timeZoneName 直接获取时区得到的结果是当前的时区的简写,结果太宽泛不是我们想要的结果
其使用简洁,只需要使用下面的方法就可以获取到当前时区
打印的结果:
flutter_native_timezone 有个缺点是,这个时区的结果只有英文结果,如果是要中文结果的小伙伴,需要自己手动转换为中文了。
Rails:使用Heroku时如何获取当前用户的时区
【中文标题】Rails:使用Heroku时如何获取当前用户的时区【英文标题】:Rails: How to get the current user's time zone when using Heroku 【发布时间】:2012-09-01 20:05:15 【问题描述】:我在 Heroku 上将我们网站的时区设置为太平洋标准时间 (PST),使用:
heroku config:add TZ=America/Los_Angeles
用户的时间现在始终采用 PST——无论他们是否处于 PST 时区。
获取用户实际时区(即他们实际所在的时区)的最佳方式是什么?
我猜这可以使用 Rails(或 Javascript?)解决,而不是 Heroku。
【问题讨论】:
我一直在浏览 Web,似乎我需要在客户端用 JS 做一些事情并将其传回服务器。请指教。 【参考方案1】:有两种方法可以做到这一点。
确实,您可以使用 javascript 来获取他们当前的时间/时区。有可能是用户的电脑时间设置不正确,这样你显示的时区就不正确了。
因为您使用的是 Rails,所以推荐的方法是将 javascript 捆绑为 gem,例如 detect_timezone_rails
。这使其易于安装(因为它全部自动捆绑在资产管道中。
您可以使用 IP 地址来推断他们的国家和时区。这种情况下的危险是用户可能正在使用代理。此外,虽然 IP 地址通常具有城市级别的分辨率,但它可能或多或少准确,在极少数情况下可能会给出错误的时区。
使用 IP 地址,您可以获得他们的大致城市和纬度/经度。在Ruby Toolbox 上有很多宝石可以做到这一点,例如。 geocoder
。通过纬度/经度,您可以使用 timezone
之类的 gem 获取时区。
您也可以使用上述方法之一,并允许用户在您的网站上手动更改他们的时区(如果已注册,则将此设置存储在数据库中,或者作为浏览器上的 cookie)。这在您弄错时区时很有用。
【讨论】:
【参考方案2】:根据您应用的设置方式,您可以通过多种方式执行此操作。这些都不是 Heroku 环境独有的。
如果您的应用允许用户注册,那么您很可能拥有一个 User 模型,并且您可能正在使用 Devise gem 进行身份验证/注册。向您的数据库 (:time_zone) 添加一个字段,并在用户注册时将其时区存储在此字段中。
>> rails generate migration add_time_zone_to_users time_zone:string
>> rake db:migrate
Rails 为您提供了一个方便的 time_zone_select 表单助手,它为您提供了一个包含所有时区的选择列表,您可以将其显示给您的用户。将其添加到用户注册表单中,并允许用户在注册时设置他们的时区。 http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/time_zone_select
在您的应用程序控制器中,您可以执行以下操作;
before_filter :set_time_zone
def set_time_zone
#current user is a devise method see https://github.com/plataformatec/devise
Time.zone = current_user.time_zone if current_user
end
然后,当您在应用程序中显示日期时,在时间实例上调用 .in_time_zone
,该时间实例将显示用户时区的时间。
<%= Time.now.in_time_zone %> or <%= @your_model.created_at.in_time_zone %>
如果您没有用户身份验证,那么您可以回退到 javascript。为此,您可以在日期对象上使用本机 javascript getTimezoneOffset()
,或者更好地使用以下 jsTimezoneDetect 插件:
http://www.pageloom.com/automatic-timezone-detection-with-javascript
最后,您可以混合使用两者,首先使用 javascript 检测它们的时区偏移量,然后将此值存储在 rails session/cookie 中,然后使用 before_filter 设置 Time.zone 如上所述,但基于会话 time_zone以前在 javascript 中计算的值。
【讨论】:
【参考方案3】:或者你可以使用这个很棒的宝石 https://github.com/kbaum/browser-timezone-rails
【讨论】:
显然这种方法有问题,因为它依赖于引擎盖下的 jstimezone。 ***.com/questions/30756405/…以上是关于Flutter获取当前所在的时区的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Dart/Flutter 中获取当前时间的 GMT 时间偏移值
Flutter Cloud Firestore 将 serverTimestamp 转换为 String