在dateutil中解析日期后,有没有办法获得"格式".例如:
>>> x = parse("2014-01-01 00:12:12")
datetime.datetime(2014, 1, 1, 0, 12, 12)
x.get_original_string_format()
YYYY-MM-DD HH:MM:SS # %Y-%m-%d %H:%M:%S
# Or, passing the date-string directly
get_original_string_format("2014-01-01 00:12:12")
YYYY-MM-DD HH:MM:SS # %Y-%m-%d %H:%M:%S
Run Code Online (Sandbox Code Playgroud)
更新:我想为这个问题添加一个赏金,看看是否有人可以添加一个相应的答案来获取传递的公共日期字符串的字符串格式.它可以使用,dateutil如果你想,但它没有.希望我们能在这里获得一些创造性的解决方案.
我试图升级dateutil从2.5.3到最新版本2.6.0有pip install dateutil --upgrade,但得到的问题Could not find a version.
$ pip install dateutil --upgrade
Collecting dateutil
Could not find a version that satisfies the requirement dateutil (from versions: )
No matching distribution found for dateutil
Run Code Online (Sandbox Code Playgroud)
我检查了帖子找不到满足要求的版本.跑pip freeze | grep dateutil了,
$ pip freeze | grep dateutil
python-dateutil==2.5.3
Run Code Online (Sandbox Code Playgroud)
我怎么知道哪个版本满足我的机器?是否可以升级dateutil到最新版本?
我有一个字符串,其中包含多个日期值,我想全部解析它们.字符串是自然语言,所以到目前为止我发现的最好的东西是dateutil.
不幸的是,如果一个字符串中有多个日期值,dateutil会抛出一个错误:
>>> s = "I like peas on 2011-04-23, and I also like them on easter and my birthday, the 29th of July, 1928"
>>> parse(s, fuzzy=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pymodules/python2.7/dateutil/parser.py", line 697, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/usr/lib/pymodules/python2.7/dateutil/parser.py", line 303, in parse
raise ValueError, "unknown string format"
ValueError: unknown string format
Run Code Online (Sandbox Code Playgroud)
关于如何解析长字符串中的所有日期的任何想法?理想情况下,会创建一个列表,但如果需要,我可以自己处理.
我正在使用Python,但此时,如果他们完成工作,其他语言可能还可以.
PS - 我想我可以在中间递归分割输入文件并尝试再试一次,直到它工作,但这是一个黑客的地狱.
好的,完全是编程和python的新手.运行Windows 7,python 2.7 x64.我正在尝试dateutil使用安装包pip.
我安装了pip,numpy并且pandas......因为它们是exe文件而非常简单.
我现在正试图pip用来安装dateutil.在Python Shell中,我输入了:
pip install dateutil
Run Code Online (Sandbox Code Playgroud)
和
pip install python-dateutil
Run Code Online (Sandbox Code Playgroud)
我继续"Invalid Syntax"在安装命令中遇到错误.我在这做错了什么?我也在python命令行中尝试过这个.
我检查了我安装的模块,我有两个pip和easy_install.现在真的很困惑...我也试过运行安装脚本dateutil,我收到此错误:
Traceback (most recent call last):
File "C:\Python27\Scripts\python-dateutil-1.5.tar\python-dateutil-1.5\setup.py", line 14, in <module>
TOPDIR = os.path.dirname(__file__) or "."
NameError: name '__file__' is not defined
Run Code Online (Sandbox Code Playgroud)
请帮忙!在此先感谢您的帮助.
我正在使用python的dateutil.parser工具来解析我从第三方提要获得的一些日期.它允许指定一个默认日期,它本身默认为今天,用于填充已解析日期的缺失元素.虽然这通常很有用,但我的用例没有合理的默认值,我宁愿将部分日期视为我根本没有得到日期(因为它几乎总是意味着我的数据乱码).我写了以下工作:
from dateutil import parser
import datetime
def parse_no_default(dt_str):
dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
if dt == dt2:
return dt
else:
return None
Run Code Online (Sandbox Code Playgroud)
(这个片段只查看日期,因为我只关心我的应用程序,但类似的逻辑可以扩展到包含时间组件.)
我想知道(希望)有更好的方法.解析相同的字符串两次只是为了看它是否填写不同的默认值似乎是浪费资源,至少可以说.
这是针对预期行为的一组测试(使用nosetest生成器):
import nose.tools
import lib.tools.date
def check_parse_no_default(sample, expected):
actual = lib.tools.date.parse_no_default(sample)
nose.tools.eq_(actual, expected)
def test_parse_no_default():
cases = (
('2011-10-12', datetime.date(2011, 10, 12)),
('2011-10', None),
('2011', None),
('10-12', None),
('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
('10-12 11:45', None),
('', None),
)
for sample, expected in cases:
yield check_parse_no_default, sample, …Run Code Online (Sandbox Code Playgroud) dateutil rrule是否支持DST和TZ?需要类似于iCalendar RRULE的东西.
如果不是 - 如何解决这个问题(安排重复发生的事件和DST偏移变化)
进口
>>> from django.utils import timezone
>>> import pytz
>>> from datetime import timedelta
>>> from dateutil import rrule
>>> now = timezone.now()
>>> pl = pytz.timezone("Europe/Warsaw")
Run Code Online (Sandbox Code Playgroud)
timedelta问题(需要具有相同的当地时间,但不同的DST偏移):
>>> pl.normalize(now)
datetime.datetime(2012, 9, 20, 1, 16, 58, 226000, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)
>>> pl.normalize(now+timedelta(days=180))
datetime.datetime(2013, 3, 19, 0, 16, 58, 226000, tzinfo=<DstTzInfo 'Europe/Warsaw' CET+1:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)
rrule问题(每次出现时需要每个当地时间相同):
>>> r = rrule.rrule(3,dtstart=now,interval=180,count=2)
>>> pl.normalize(r[0])
datetime.datetime(2012, 9, 20, 1, 16, 58, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)
>>> pl.normalize(r[1])
datetime.datetime(2013, …Run Code Online (Sandbox Code Playgroud) 我使用python-dateutil来解析字符串中的日期:
import dateutil.parser
print dateutil.parser.parse('some null string', fuzzy=True).date()
2012-10-18
print dateutil.parser.parse('some 31 Oct 2012 string', fuzzy=True).date()
2012-10-31
Run Code Online (Sandbox Code Playgroud)
我期待的是dateutil.parser.parse('some null string', fuzzy=True).date()抛出异常,但它返回当前日期.如果在提供的字符串中找不到日期,有人可以告诉我如何避免获取当前日期吗?
提前致谢.
熊猫的内部问题:我一直惊讶地发现了几次,明确传递调用到date_parser内pandas.read_csv导致多慢读取时间比单纯使用infer_datetime_format=True.
为什么是这样?这两个选项之间的时间差异是特定于日期格式的,还是其他因素会影响它们的相对时间?
在下面的例子中,infer_datetime_format=True传递具有指定格式的日期解析器的时间的十分之一.我天真地认为后者会更快,因为它是明确的.
文档注意到,
[如果为True,] pandas将尝试推断列中日期时间字符串的格式,如果可以推断,请切换到更快的解析方法.在某些情况下,这可以将解析速度提高5-10倍.
但是没有给出太多细节,我无法完全通过源头工作.
建立:
from io import StringIO
import numpy as np
import pandas as pd
np.random.seed(444)
dates = pd.date_range('1980', '2018')
df = pd.DataFrame(np.random.randint(0, 100, (len(dates), 2)),
index=dates).add_prefix('col').reset_index()
# Something reproducible to be read back in
buf = StringIO()
df.to_string(buf=buf, index=False)
def read_test(**kwargs):
# Not ideal for .seek() to eat up runtime, but alleviate
# this with more loops than needed in timing below
buf.seek(0)
return …Run Code Online (Sandbox Code Playgroud) 我想以天为单位得出relativedelta的总持续时间.
预期:
dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days)
Run Code Online (Sandbox Code Playgroud)
我尝试了什么:
dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG)
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?谢谢!
我正在用 Python 做一些时间计算。
其中一部分是试图:
给定一个日期,加上时间间隔(X 年,X 个月,X 周),返回日期
IE
我查看了 datetime 和datetime.timedelta 文档
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, week=0)¶。
如果我想增加一定数量的小时数或周数,这些似乎效果很好。然而,
例如
start = datetime.datetime(2000, 1, 1)
# expected output: datetime.datetime(2001, 1, 1)
# with the weeks, etc arguments given in timedelta, this fails unsurprisingly e.g
start + datetime.timedelta(weeks = 52)
# returns datetime.datetime(2000, 12, 30, 0, 0)
Run Code Online (Sandbox Code Playgroud)
使用 datetime 的基本工具是否可以进行基于年份的操作 - 如果可以,我将如何进行?
我意识到对于年份示例,我可以只做 …
python ×10
python-dateutil ×10
datetime ×3
pip ×2
python-2.7 ×2
macos-sierra ×1
pandas ×1
parsing ×1
python-3.x ×1
pytz ×1
rrule ×1
timedelta ×1
upgrade ×1