Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用箭头从带有时区的字符串中分析日期和时间_Python_Datetime_Timezone_Arrow Python - Fatal编程技术网

Python 使用箭头从带有时区的字符串中分析日期和时间

Python 使用箭头从带有时区的字符串中分析日期和时间,python,datetime,timezone,arrow-python,Python,Datetime,Timezone,Arrow Python,我有 我如何用Arrow解析它,从而得到一个带有时区tz的Arrow对象?以下默认值为UTC时间 import arrow s = '2015/12/1 19:00:00' tz = 'Asia/Hong_Kong' [30]中的:arrow.get(s'YYYY/M/D HH:mm:ss') 出[30]: 我知道.to功能,但它会转换时区,但不允许我更改为时区。尝试以下操作: In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss') Out[30]: <A

我有

我如何用Arrow解析它,从而得到一个带有时区
tz
的Arrow对象?以下默认值为UTC时间

import arrow
s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
[30]中的
:arrow.get(s'YYYY/M/D HH:mm:ss')
出[30]:
我知道
.to
功能,但它会转换时区,但不允许我更改为时区。

尝试以下操作:

In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss')
Out[30]: <Arrow [2015-12-01T19:00:00+00:00]>

我还没有资格添加评论,我只想和大家分享一个简单一点的关于时区str表达式的答案

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=dateutil.tz.gettz(tz))
或者只是本地时区:

s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=tz)
或指定的ISO-8601样式:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='local')
根据当前设置,您还可以为
arrow.get()
提供默认时区,例如:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='+08:00')

但是,到目前为止(版本0.12.1),存在一个缺点,即对于基于字符串的日期解析来说,这不起作用。幸运的是,这一点,因此Arrow的下一个版本将集成此修复程序。

这从0.10.0开始对我有效:

导入箭头
s='2015/12/1199:00:00'
tz=‘亚洲/香港’
arrow.get(s'YYYY/M/D HH:mm:ss',tzinfo=tz)
# 

但是,
arrow.get('2018-01-29 14:46',tzinfo='US/Central')
(即不带格式字符串)忽略了
tzinfo
参数。

在arrow文档中,我看到构造函数的工作方式类似于:“class arrow.arrow.arrow(年、月、日、小时=0,分钟=0,秒=0,微秒=0,tzinfo=None)”。这就足够解决你的问题了吗?它实际上返回了一个箭头对象和你想要的tz。这很有效!只是出于好奇,有没有可能对pytz也这么做?我得到了一些奇怪的结果:
In[7]:arrow.get(s,'YYYY/M/D HH:mm:ss')。replace(tzinfo=pytz.timezone(tz))Out[7]:
不确定,但我认为arrow与dateutil比对比pytz更好。@mchangun:如果不想默默忽略错误,解析时间的正确方法是:
pytz.timezone('Asia/hongkong')。localize(datetime.strptime)(s,'%Y/%m/%d%H:%m:%s'),is_dst=None)
@mchangun:btw,我发现即使经过两年的开发@mchangun:“更好”取决于您的应用程序。我使用的是
pytz
,但对于大多数应用程序来说,它的级别可能太低。尽管您需要了解pytz引入
localize()
normalize()
方法,以正确使用它。
s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
arrow.get(s, tzinfo=tz)