由于时区缩写,我很难将非UTC时间的字符串表示转换为UTC.
(更新:似乎时区缩写可能不是唯一的.如果是这样,也许我也应该考虑这一点.)
我一直在尝试使用datetutil和pytz寻找方法,但没有任何运气.
建议或解决方法将不胜感激.
string = "Jun 20, 4:00PM EDT"
Run Code Online (Sandbox Code Playgroud)
我想将其转换为UTC时间,在适当的时候考虑夏令时.
更新:找到一些可能有助于更有经验的用户回答Q的参考资料.
从本质上讲,我会想象的解决方案做相反的一部分这个.
最终更新(重要)
一些基于date命令的简单示例,使用TZOFFSET字典提供BRST时区偏移量.
解析("Thu Sep 25 10:36:28 BRST 2003",tzinfos = TZOFFSETS)datetime.datetime(2003,9,25,10,36,28,tzinfo = tzoffset('BRST', - -10800))
parse("2003 10:36:28 BRST 25 Sep Thu",tzinfos = TZOFFSETS)datetime.datetime(2003,9,25,10,36,28,tzinfo = tzoffset('BRST', - -10800))
dateutil.parser用于解析给定的字符串并将其转换为datetime.datetime对象.它通过允许dayfirst和yearfirst参数给出某种格式的先例来处理模糊日期,如"2-5-2013" .
如果遇到模糊日期,解析器是否可能引发错误?我想这将需要修改源代码(parser.py左右线)675/693/696,但如果有不需要逐字修改源代码,而不是仅仅涉及重新定义某些功能的方式,那简直太好了同样.
目前的行为:
>>> from dateutil import parser
>>> parser.parse("02-03-2013")
datetime.datetime(2013, 2, 3, 0, 0)
Run Code Online (Sandbox Code Playgroud)
期望的行为:
>>> from dateutil import parser
>>> parser.parse("02-03-2013")
Traceback (most recent call last):
..
ValueError: The date was ambiguous...<some text>
Run Code Online (Sandbox Code Playgroud) 在dateutil2.2中,我无法使tzstr示例工作(见下文).它抛出一个错误'str' object has no attribute 'read'.查看代码,它失败了self.instream.read(1).我应该通过什么类型的?
In [3]: import dateutil.tz
In [4]: dateutil.tz.tzstr('EST5EDT')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-75889fcde3a9> in <module>()
----> 1 dateutil.tz.tzstr("PST")
/Library/Python/2.7/site-packages/dateutil/tz.pyc in __init__(self, s)
579 self._s = s
580
--> 581 res = parser._parsetz(s)
582 if res is None:
583 raise ValueError("unknown string format")
/Library/Python/2.7/site-packages/dateutil/parser.pyc in _parsetz(tzstr)
923 DEFAULTTZPARSER = _tzparser()
924 def _parsetz(tzstr):
--> 925 return DEFAULTTZPARSER.parse(tzstr)
926
927
/Library/Python/2.7/site-packages/dateutil/parser.pyc in parse(self, tzstr)
770 …Run Code Online (Sandbox Code Playgroud) 我很难过.我编写的日期清理功能在我的Mac上使用Python 2.7.5,但在我的Ubuntu服务器上不在2.7.6中.
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> date = datetime.strptime('2013-08-15 10:23:05 PDT', '%Y-%m-%d %H:%M:%S %Z')
>>> print(date)
2013-08-15 10:23:05
Run Code Online (Sandbox Code Playgroud)
为什么这在Ubuntu的2.7.6中不起作用?
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> date = datetime.strptime('2013-08-15 10:23:05 PDT', '%Y-%m-%d %H:%M:%S %Z') …Run Code Online (Sandbox Code Playgroud) 我想看看日期列表是否是有效日期.我正在使用dateutil库,但我得到了奇怪的结果.例如,当我尝试以下操作时:
import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())
Run Code Online (Sandbox Code Playgroud)
我得到的结果1984-10-12T00:00:00是错的.有谁知道为什么这12会被添加到日期?
从IPython控制台:
In [16]: b
Out[16]: datetime.datetime(2008, 3, 1, 0, 0)
In [17]: e
Out[17]: datetime.datetime(2010, 5, 2, 0, 0)
In [18]: rrule(MONTHLY).between(b, e, inc=True)
Out[18]:
[datetime.datetime(2009, 3, 6, 14, 42, 1),
datetime.datetime(2009, 4, 6, 14, 42, 1),
datetime.datetime(2009, 5, 6, 14, 42, 1),
datetime.datetime(2009, 6, 6, 14, 42, 1),
datetime.datetime(2009, 7, 6, 14, 42, 1),
datetime.datetime(2009, 8, 6, 14, 42, 1),
datetime.datetime(2009, 9, 6, 14, 42, 1),
datetime.datetime(2009, 10, 6, 14, 42, 1),
datetime.datetime(2009, 11, 6, 14, 42, 1),
datetime.datetime(2009, …Run Code Online (Sandbox Code Playgroud) 我正在使用一个看起来像 Google 日历的应用程序,但有一个主要区别:事件不应与其他事件有交叉。这意味着没有两个事件可以共享相同的时间,即使是分钟粒度。这对于仅存储会议的日历特别有用,因为不可能同时参加两个会议。
就像 Google 日历一样,可以使用重复规则(例如,每个周五和周日上午 10 点到下午 13 点)创建事件。因此,我想仅使用rrules(python-dateutil 模块)来检测重叠事件,而不需要创建 N 个日期时间对象并检查每个对象的交集。
是否可以仅使用 rrules 来检测重叠日期?另一个库中是否已经实现了类似的功能?
python intersection interval-intersection python-datetime python-dateutil
我一直在通过stackoverflow搜索答案,但我无法在Python和Pythonic方式中找到我正在寻找的东西.
我试图根据两个日期提前几天,几周或几个月.这是我创建的一个小脚本,它可以做我想做的事情,但我很关心它.
import datetime
from dateutil.relativedelta import relativedelta
now = datetime.datetime.now()
days_ahead = datetime.datetime.now() + relativedelta(days=3)
weeks_ahead = datetime.datetime.now() + relativedelta(weeks=2)
month_ahead = datetime.datetime.now() + relativedelta(months=1)
months_ahead = datetime.datetime.now() + relativedelta(months=3)
def get_relative_date(dt):
ahead = (dt - now).days
if ahead < 7:
return "Due in " + str(ahead) + " days"
elif ahead < 31:
return "Due in " + str(ahead/7) + " weeks"
else:
return "Due in " + str(ahead/30) + " months"
print get_relative_date(days_ahead)
print get_relative_date(weeks_ahead)
print get_relative_date(month_ahead) …Run Code Online (Sandbox Code Playgroud) 我将日期作为字符串获取,然后将其解析为 datetime 对象。有什么方法可以检查对象的日期格式是什么?
假设这是我正在创建的对象:
modified_date = parser.parse("2015-09-01T12:34:15.601+03:00")
Run Code Online (Sandbox Code Playgroud)
我如何打印或获取此对象的确切日期格式,我需要它以验证它的格式是否正确,因此我将能够对今天的日期和给定的日期进行比较。
按照这个答案,我试图获取当月最后一个星期四的日期。但是我的代码没有跳出循环。
from datetime import datetime
from dateutil.relativedelta import relativedelta, TH
todayte = datetime.today()
cmon = todayte.month
nthu = todayte
while nthu.month == cmon:
nthu += relativedelta(weekday=TH(1))
#print nthu.strftime('%d%b%Y').upper()
Run Code Online (Sandbox Code Playgroud) python ×10
python-dateutil ×10
datetime ×3
timezone ×2
dst ×1
intersection ×1
pytz ×1
rrule ×1
utc ×1