使python datetime包含本地时区

时间:2019-02-13 17:56:58

标签: python datetime

我写了这个python代码,但是我面临使它在时区级别正常工作的问题。因此,基本上datetime.now()不能按预期工作,因为它不符合我的本地时间(巴黎本地时间)。任何想法如何解决这个问题。

from datetime import datetime, timedelta
from airflow.operators import 
GoogleCloudStorageToGoogleCloudStorageOperator
copy_trm = GoogleCloudStorageToGoogleCloudStorageOperator(
        task_id='copy_file',
        source_bucket="source",
        source_object="input-files/*.orc",
        destination_bucket="destination",
        destination_object="output-files/recent",
        last_modified_time=datetime.now() - timedelta(days=1)

最好的问候

3 个答案:

答案 0 :(得分:0)

使用pytz模块

import pytz
tz = pytz.timezone('Pacific/Johnston')   #change it to your suitable timezone
ct = datetime.now(tz=tz)

答案 1 :(得分:0)

如果您想知道当前的时区名称。可以使用以下代码:

import datetime
dt = datetime.datetime.now()
dt.astimezone().tzname()

输出:

'IST'

您可以采用以下UTC格式发送时间:

dt.astimezone().utcnow()

答案 2 :(得分:0)

使用标准库,需要数字偏移量

如果您具有时区的数字偏移量(与UTC相比),则可以使用标准库:

>>> from datetime import datetime, timezone
>>> datetime.now().strftime("%c (%Z)")
'Wed Feb 13 23:00:06 2019 ()'
>>> datetime.now(tz=timezone.utc).strftime("%c (%Z)")
'Wed Feb 13 22:00:11 2019 (UTC)'
>>> datetime.now(tz=timezone(timedelta(hours=2))).strftime("%c (%Z)")
'Thu Feb 14 00:00:20 2019 (UTC+02:00)'

尽管偏移量可能会在全年中发生变化(例如,夏时制),但建议使用命名时区。

通过dateutils,使用主机时区数据库

Python documentation on timezone指向dateutil.tz软件包,它将使用运行它的机器上的时区数据库。另一方面,pytz程序包附带捆绑的时区数据库。

我个人建议使用dateutil软件包,因为该数据库已经存在于运行的计算机上。只要机器保持最新状态(任何服务器和PC都应如此),您就可以使用。

>>> from dateutil.tz import gettz  # GNU/Linux and macOS
>>> # Or, on Windows: from dateutil.tz.win import gettz
>>> datetime.now(tz=gettz("Europe/Paris")).strftime("%c (%Z)")
'Wed Feb 13 23:00:58 2019 (CET)'
>>> datetime.now(tz=gettz("Asia/Taipei")).strftime("%c (%Z)")
'Thu Feb 14 06:01:27 2019 (CST)'