标签: python-dateutil

在(python)日期范围内"传递Go"

更新以删除无关的文本和歧义.

规则:
员工在每个季度后的第二天产生8小时的带薪休假时间.宿舍,特别是:

  • 1月1日至3月31日
  • 4月1日至6月30日
  • 7月1日至9月30日
  • 10月1日 - 12月31日

问题
使用python,我需要定义以下函数的内容:

def acrued_hours_between(start_date, end_date): 
    # stuff
    return integer
Run Code Online (Sandbox Code Playgroud)

我目前正在使用Python,并想知道这样的事情的正确方法是什么.

我假设使用DateTime对象,可能还有dateutil模块,在这里会有所帮助,但我的大脑并没有因为某些原因而解决这个问题.

更新
我想象计算有点简单,因为问题是:

"从start_date到end_date会产生多少小时的付费休假?" 鉴于上述"规则".

python datetime calendar date python-dateutil

2
推荐指数
1
解决办法
538
查看次数

如何将 dateutil.relativedelta 对象转换为 datetime.timedelta 对象?

如何将 dateutil.relativedelta 对象转换为 datetime.timedelta 对象?

例如,

# pip install python-dateutil

from dateutil.relativedelta import relativedelta
from datetime import timedelta

rel_delta = relativedelta(months=-2)
# How can I convert rel_delta to a timedelta object so that I can call total_seconds() ?
time_delta = ???(rel_delta)  
time_delta.total_seconds()  # call the timedelta.total_seconds() method
Run Code Online (Sandbox Code Playgroud)

python datetime timedelta relative-date python-dateutil

2
推荐指数
2
解决办法
5992
查看次数

python中strftime的基本日期解析用法

这是一个关于在 strftime 中使用日期解析符号的简单问题。以下格式的给定日期:

mydt = "25-06 01:02:03" 
Run Code Online (Sandbox Code Playgroud)

然后我尝试正确解析字符串是:

DateFormat = '%d-%m %H:%M:%S'
Run Code Online (Sandbox Code Playgroud)

但显然这是不正确的:

import dateutil.parser
DateFormat = '%d-%m %H:%M:%S'
mydt = "25-06 01:02:03"
dateutil.parser.parse(mydt).strftime(DateFormat)

ValueError: month must be in 1..12
Run Code Online (Sandbox Code Playgroud)

请建议对解析模式进行适当的调整/修复。

python date-parsing python-dateutil

2
推荐指数
1
解决办法
2676
查看次数

Python:如何比较两个日期/时间?

我有以下两个日期/时间,分别是date_time1date_time2

2017-04-15 00:00:00
2017-04-17 15:35:19+00:00

parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)
Run Code Online (Sandbox Code Playgroud)

如果我收到另一个日期/时间input_date_time(例如 2017-04-16 12:11:42+00:00),我想做以下事情:

#    Would like to check if `input_date_time` is within the range 
if parsed1 <= input_date_time <= parsed2:
… 
Run Code Online (Sandbox Code Playgroud)

并得到一个错误: TypeError: can't compare offset-naive and offset-aware datetimes

想把它分解成年、月、日、小时、分钟和秒,然后比较每一个。

这样做的正确方法是什么?

python datetime python-dateutil

2
推荐指数
1
解决办法
2万
查看次数

将具有时区的字符串转换为UTC日期时间对象python

我有一个这样的时区感知字符串,并希望将其转换为 UTC 时区。我正在使用 python 3.4 版本

我的字符串就像 -

2018-05-04T05:22:52.3272611-04:00
Run Code Online (Sandbox Code Playgroud)

我无法获得有关将给定日期时间转换为 UTC 的太多信息。

python-3.x python-datetime python-dateutil

2
推荐指数
1
解决办法
3470
查看次数

python 从日期范围中获取季度日期

python 从日期范围中获取季度日期

例子 :

start date = 01/04/2020
end date = 01/04/2021
Run Code Online (Sandbox Code Playgroud)

在这里,我需要获取该日期范围内的第四纪日期。

python python-3.x python-datetime pandas python-dateutil

2
推荐指数
1
解决办法
5348
查看次数

dateutil.parser 解析格式为“%Y:%m:%d”的日期时出现奇怪的结果

我喜欢dateutil.parser并经常使用它,因此我不必担心日期时间格式不一致,并且在大多数情况下它对我来说非常可靠。

但今天我花了一个小时调试试图理解为什么我在数据库中填充的日期都是 2022 年。日期格式是:2009:05:03 08:12:37存储在照片元数据中并使用exifpackage.json 提取。

感觉它应该是一种相当简单的解析格式,但这就是我分别使用dateutildatetime模块得到的:

from dateutil.parser import parse
import datetime as dt

date_string = '2009:05:03 08:12:37'

wrong = parse(date_string, fuzzy=True)
correct = dt.datetime.strptime(date_string, "%Y:%m:%d %H:%M:%S")

print(wrong)
print(correct)

Out:
2022-07-25 08:12:37
2009-05-03 08:12:37
Run Code Online (Sandbox Code Playgroud)

正常解析和模糊解析都给出相同的结果。很奇怪,我什至不明白它是如何得出这个精确结果的。

看起来它尝试解析并成功完成时间,但无法解析日期并默认设置当前日期。这感觉像是一种非常危险的行为。它应该引发异常。

python datetime parsing python-dateutil

2
推荐指数
1
解决办法
1380
查看次数

python-dateutil - RRule - 不同工作日的不同时间

我正在使用 rrule,如下所示:https ://labix.org/python-dateutil#head-470fa22b2db72000d7abe698a5783a46b0731b57

我想知道是否有可能创建一个规则,为不同的工作日指定不同的时间,例如每周星期四下午 6 点和星期六上午 10 点

希望有人可以帮助:)

python rrule python-datetime python-dateutil

1
推荐指数
1
解决办法
2720
查看次数

如何使用 dateutil.tz.tz.tzoffset 来本地化使用 strptime 创建的时区天真日期时间?

我如何使用 dateutil.tz.tz.tzoffset 类型的对象来本地化具有正确时区和 DST 信息的时区原始日期时间对象,以便它可以正确转换为 UTC?或者,如何将 dateutil.tz.tz.tzoffset 转换为 pytz.timezone?

我一直无法找到有关使用 dateutil.tz.tz.tzoffset 对象本地化日期时间对象的好信息。请参阅下面的一些我审查过的更好的文章。

背景资料:

我正在处理大量日期字符串,其中大多数没有时区信息。在某些情况下,时间是格林威治标准时间,在其他情况下是本地时间。我必须首先确定创建这些各种日志的设备的时区,然后解析各种日期字符串,如果是本地时间,则添加添加时区,最后将其转换为 UTC。

我几乎让这一切都在工作,除了确定时区的唯一可靠方法是从文本文件中获取日期格式为 EDT、IST 等,因此我使用了以下链接中最高投票的帖子来完成这使用 dateutil 的 parser.parse() 函数并将其发送给它的 tzinfos 参数的字典。(在 Python 中使用时区缩写名称解析日期/时间字符串?

但是,这给我留下了一个 DateTime,它有一个 tzinfo type=dateutil.tz.tz.tzoffset。我没问题,除非我需要使用这个 tzinfo 来本地化不包含时区信息的字符串,并且 dateutil.tz.tz.tzoffset 类型没有像 pytz.timezone 那样的本地化选项,这是关键我的问题。

我让这太难了吗?我是否只是用我保存的 dateutil.tz.tz.tzoffset 对象替换了时区天真日期时间中的 tzinfo ?

代码:

下面读取日期字符串并将其保存为日期时间对象,将时区保存在 var 中以备后用,然后将日期字符串转换为 UTC:

from dateutil.parser import parse as parsedate
import pytz
from pytz import timezone
from datetime import datetime

timestr = 'Sat, 5/01/2019 8:00PM EDT' #only reliable source of timezone info
dtfromstrEDT = parsedate(timestr, tzinfos=tzd) …
Run Code Online (Sandbox Code Playgroud)

python datetime pytz python-dateutil

1
推荐指数
1
解决办法
1610
查看次数

类型错误:parse() 缺少 1 个必需的位置参数:'timestr'

我正在尝试抓取一个网站,但我不断收到本文标题中的错误。我还没有找到解决这个问题的方法,非常感谢任何帮助。这是我的代码:

import requests
import json
from dateutil.parser import parser

url = 'website url'
info = requests.get(url)
data = info.json()

for entry in data['properties']['periods']:
    t = entry['startTime']
    print(parser.parse(t))
Run Code Online (Sandbox Code Playgroud)

我试图抓取的网站是一个 JSON 格式的天气预报 API。、'properties''periods''startTime'JSON 中的类别。有趣的是,当我向解析器提供存储在这些类别中的值时,它可以无缝工作,但当该值是变量时则不然。我究竟做错了什么?

示例数据

python python-3.x python-dateutil

1
推荐指数
1
解决办法
2738
查看次数

从时区偏移量本地化日期时间(时区感知)

我有一个 UTC 时间戳和一个时区偏移时间戳(均以毫秒为单位):

utc_time = 1394452800000
timezoneoffset = -14400000
Run Code Online (Sandbox Code Playgroud)

如果我想得到datetime我会做的:

print datetime.utcfromtimestamp(utc_time/1000)
>>>2014-03-10 12:00:00
Run Code Online (Sandbox Code Playgroud)

我怎样才能本地化这个日期时间而且最终对象是时区感知的?

如果我除以timezoneoffset-14400000/(3600*1000) = -4(小时)。所以最终的输出应该是:

>>>2014-03-10 08:00:00-04:00
Run Code Online (Sandbox Code Playgroud)

我的尝试:

from pytz import timezone
from dateutil.tz import tzoffset

utc_time = 1394452800000
timezoneoffset = -14400000

tzinfooff = tzoffset(None, timezoneoffset/1000)

print timezone(tzinfooff).localize( datetime.utcfromtimestamp(utc_time/1000) )

>>>Traceback (most recent call last):
  File "/Users/dionysis_lorentzos/Desktop/cmdline copy.py", line 25, in <module>
    print timezone(tzinfo2).localize( datetime.utcfromtimestamp(time/1000) ).isoformat()
  File "/usr/local/lib/python2.7/site-packages/pytz/__init__.py", line 162, in timezone
    if zone.upper() == 'UTC':
AttributeError: 'tzoffset' object has no attribute 'upper'
Run Code Online (Sandbox Code Playgroud)

python pytz python-datetime python-dateutil

0
推荐指数
1
解决办法
6116
查看次数