天道酬勤,学无止境

tzinfo

如何将 TZInfo 标识符转换为 Rails 时区名称/键(How to Convert TZInfo identifier to Rails TimeZone name/key)

问题 如何将作为 TZInfo 标识符接收的 js 值转换为 Rails TimeZone 名称/键? FROM: "America/New_York"从 JavaScript TZinfo 检测返回 TO:Rails TimeZone 中使用的"Eastern Time (US & Canada)"约定 或另一个例子: "Pacific/Honolulu" => 转换为 => "Hawaii" 两者都在ActiveSupport::TimeZone < Object映射中可用,但 rails 在下拉列表、验证和存储到Time.use_zone()使用键 [ig "Eastern Time (US & Canada)" ] 。 根据我对ActiveSupport::TimeZone.us_zones理解,这似乎很重要,尤其是在 DayLights 节省时间(这听起来很好处理)并且仅匹配偏移量无法实现的情况下。 如果它没有使用 rails TimeZone 名称存储到 DB 中,则验证将失败并且在用户的配置文件设置页面中与ActiveSupport::TimeZone.zones_map的下拉列表不正确匹配 这样做的目标是用户不必在注册时选择他们的时区,也不必在注册后在他们的设置中更改时区。 浏览器检测到它并在注册时将其传递给 hidden_​​field。 在极少数情况下

2021-11-26 01:09:24    分类:技术分享    ruby-on-rails   ruby-on-rails-3   timezone   activesupport   tzinfo

How to Convert TZInfo identifier to Rails TimeZone name/key

How do you convert js values received as TZInfo identifiers to Rails TimeZone name/key? FROM: "America/New_York" returned from JavaScript TZinfo detection TO: "Eastern Time (US & Canada)" convention used in Rails TimeZone or another example: "Pacific/Honolulu" => converted to => "Hawaii" Both are available in ActiveSupport::TimeZone < Object mapping but rails uses the key [i.g. "Eastern Time (US & Canada)"] in drop-downs, validation & storing to Time.use_zone(). Based on what I understand of ActiveSupport::TimeZone.us_zones this seems to be important especially incases of DayLights savings

2021-11-21 06:07:51    分类:问答    ruby-on-rails   ruby-on-rails-3   timezone   activesupport   tzinfo

为什么 pytz localize() 不生成一个日期时间对象,其 tzinfo 匹配本地化它的 tz 对象?(Why doesn't pytz localize() produce a datetime object with tzinfo matching the tz object that localized it?)

问题 有没有人可以帮助我了解这里发生了什么? import pytz from datetime import datetime tz = pytz.timezone('Europe/Berlin') print repr(tz) # <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD> dt = datetime(2011, 1, 3, 18, 40) result = tz.localize(dt) print repr(result.tzinfo) # <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD> assert result.tzinfo == tz, "Why aren't these the same timezone?" 我的理解是 pytz 时区对象上的localize()方法将采用一个简单的 datetime 对象,并添加一个与执行本地化的时区对象相匹配的tzinfo属性。 在这种情况下,这似乎不会发生。 显然,我对时区或 pytz 处理时区的方式有一些误解。 谁能解释一下? 回答1 他们是同一个时区—— "Europe/Berlin" 。 当您打印它们时,输出包括适用于该特定时间点的缩写和偏移量。 如果您检查 tz 数据源,您将看到: # Zone NAME GMTOFF RULES

2021-11-19 16:42:58    分类:技术分享    python   datetime   timezone   pytz   tzinfo

Why doesn't pytz localize() produce a datetime object with tzinfo matching the tz object that localized it?

Is there anyone who can help me understand what's going on here? import pytz from datetime import datetime tz = pytz.timezone('Europe/Berlin') print repr(tz) # <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD> dt = datetime(2011, 1, 3, 18, 40) result = tz.localize(dt) print repr(result.tzinfo) # <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD> assert result.tzinfo == tz, "Why aren't these the same timezone?" My understanding was that the localize() method on a pytz timezone object would take a naive datetime object, and add a tzinfo property that matches the timezone object performing the localization

2021-11-15 04:39:55    分类:问答    python   datetime   timezone   pytz   tzinfo

Ruby 'gem tzinfo'

From my previous question about timezones, I decided to use the Ruby gem tzinfo to get access to time zone data. This means storing scheduled times as a timezone name (e.g. "America/Toronto"), and then using the Ruby tzinfo gem and tzinfo database to look up the correct UTC time from a desired local time. My understanding is that the database of time zones changes from time to time because different jurisdictions call for different policies on the (non)application of Daylight Savings Time. Once I install the Ruby gem tzinfo, how do I keep the time zone database up to date? Also, are time-zones

2021-11-11 21:39:07    分类:问答    ruby   jrubyonrails   tzinfo

如何在 Python 中使用 datetime.tzinfo?(How to use datetime.tzinfo in Python?)

问题 我不知道如何使用datetime.tzinfo模块。 我必须将日期时间数据从 UTC 转换为本地时区,如果我检索 '+2'(这意味着 gmt+2),我该如何将其转换为 tzinfo 对象? 另外,是否可以从 UTC 转换为本地时区并自动应用夏令时? 如何设置仅在 dst 期间自动减去一小时? 回答1 Python 并没有真正实现好时区。 根据文档,tzinfo 只是一个旨在由用户实现的抽象类。 我建议使用第三方 pytz 模块来处理时区。 回答2 您可以使用tzoffset来设置您检索的时区偏移量。 例如,如果您得到“+2”,请解析该字符串,使n = 2 : from dateutil.tz import tzoffset utc_dt = your_datetime.replace(tzinfo=tzoffset("UTC+0",0)) local_dt = utc_dt.astimezone(tzoffset("UTC+{}".format(n), n*60*60)) 使用变量utc_dt只是为了确保您的原始日期时间具有正确的 UTC 时区作为属性,否则它将不起作用。 然后,您可以为目标本地时间设置以秒为单位的偏移量。 我不确定仅知道 UTC/GMT 偏移量是否可以应用 DST,因为时区中的某些国家/地区可能不应用它。 如果你有准确的本地化,比如“欧洲/维也纳”

2021-10-18 17:54:27    分类:技术分享    python   datetime   timezone   tzinfo

使用时区打印正确的时间,Python(Printing correct time using timezones, Python)

问题 扩展 好吧,我们今天过得并不愉快。 当您将正确的 tzinfo 对象附加到 datetime 实例,然后您 strftime() 它时,它仍然以 UTC 出现,似乎忽略了我附加到它的漂亮的 tzinfo 对象。 # python 2.5.4 now = datetime.now() print now.strftime( "%a %b %d %X" ) # %X is "locale's appropriate time rep" pst = now.replace( tzinfo=Pacific ) print pst.strftime( "%a %b %d %X" ) 我们得到: Mon Jan 18 17:30:16 Mon Jan 18 17:30:16 我发现如果我添加 %z,我可以添加它应该计算的差异: Mon Jan 18 17:32:38 Mon Jan 18 17:32:38 -0800 它只是在那里加上 -8,好像在说,“你自己做,foo。” 但我希望 strftime() 简单地给我一个预先计算本地时间的字符串。 当我使用 strftime() 时,如何让 strftime() 为我做小时减法运算? 我正在使用的完整代码如下。 from datetime import tzinfo, timedelta, datetime ZERO =

2021-08-14 01:50:08    分类:技术分享    python   datetime   tzinfo

How to use datetime.tzinfo in Python?

I have no idea how to use datetime.tzinfo module. I have to convert a datetime data from UTC to local timezone and if I retrieve '+2'(which means gmt+2) how do I convert this to tzinfo object? Also, is it possible to convert from UTC to local timezone with daylight saving time applied automatically? How do I set to subtract one hour automatically only during dst?

2021-06-22 03:42:29    分类:问答    python   datetime   timezone   tzinfo

Printing correct time using timezones, Python

Extends Ok, we are not having a good day today. When you attach the correct tzinfo object to a datetime instance, and then you strftime() it, it STILL comes out in UTC, seemingly ignoring the beautiful tzinfo object I attached to it. # python 2.5.4 now = datetime.now() print now.strftime( "%a %b %d %X" ) # %X is "locale's appropriate time rep" pst = now.replace( tzinfo=Pacific ) print pst.strftime( "%a %b %d %X" ) We get: Mon Jan 18 17:30:16 Mon Jan 18 17:30:16 I found if I add %z, I can add the difference its supposed to have computed: Mon Jan 18 17:32:38 Mon Jan 18 17:32:38 -0800 It just

2021-06-14 03:04:13    分类:问答    python   datetime   tzinfo

“datetime.datetime”对象的属性“tzinfo”不可写(attribute 'tzinfo' of 'datetime.datetime' objects is not writable)

问题 如何设置刚刚从数据存储中出来的日期时间实例的时区? 当它第一次出现时,它是UTC。 我想将其更改为 EST。 我正在尝试,例如: class Book( db.Model ): creationTime = db.DateTimeProperty() 检索 Book 时,我想立即设置其 tzinfo: book.creationTime.tzinfo = EST 我在哪里使用这个例子作为我的 EST 对象 但是我得到: attribute 'tzinfo' of 'datetime.datetime' objects is not writable 我已经看到许多推荐 pytz 和 python-dateutil 的答案,但我真的很想回答这个问题。 回答1 datetime的对象是不可变的,因此您永远不会更改它们的任何属性——您可以创建一个具有相同属性和不同属性的新对象,并将其分配给您需要将其分配给的任何对象。 即,在你的情况下,而不是 book.creationTime.tzinfo = EST 你必须编码 book.creationTime = book.creationTime.replace(tzinfo=EST) 回答2 如果您收到一个日期是在美国东部时间,但没有它的tzinfo字段设置,使用dt.replace(tzinfo=tz)分配一个tzinfo不修改的时间

2021-06-11 08:51:34    分类:技术分享    python   google-app-engine   datetime   tzinfo