Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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_Utc - Fatal编程技术网

Python 将日期时间字符串、时区转换为历元秒

Python 将日期时间字符串、时区转换为历元秒,python,datetime,timezone,utc,Python,Datetime,Timezone,Utc,我有一个看似简单的问题,但却找不到直截了当的答案。我想写一个函数,以两个字符串作为输入,并给出一个整数作为输出 在R中,函数将非常简单: utc_seconds = function(date_string, tz) as.integer(as.POSIXct(date_string, tz = tz)) 我控制着date\u string,并且知道格式总是正确的,例如2018-02-11 00:00:00,我还知道tz将始终在 输入/输出示例: utc_seconds('2018-02-11

我有一个看似简单的问题,但却找不到直截了当的答案。我想写一个函数,以两个字符串作为输入,并给出一个整数作为输出

在R中,函数将非常简单:

utc_seconds = function(date_string, tz) as.integer(as.POSIXct(date_string, tz = tz))
我控制着
date\u string
,并且知道格式总是正确的,例如
2018-02-11 00:00:00
,我还知道
tz
将始终在

输入/输出示例:

utc_seconds('2018-02-11 00:00:00', tz = 'Asia/Singapore')
# 1518278400
我研究了
datetime
pytz
time
等的各种组合/排列,但都没有结果。这张桌子看起来很有希望,但最终我还是不知道如何使用它

我管理了一个“黑客”,如下所示,但这感觉很无聊(将无关信息添加到输入字符串中):


但我也无法将其转换到UTC时间。

在@Udayraj Deshmukh的推动下,我拼凑了以下内容:

from dateutil.parser import parse
from pytz import timezone, utc
from datetime import datetime
def utc_seconds(input, tz):
    tz = timezone(tz)
    dt = tz.localize(parse(input), is_dst = None)
    return int((dt - datetime(1970, 1, 1, tzinfo = utc)).total_seconds())
utc_seconds('2018-02-11 00:00:00', 'Asia/Singapore')
# 1518278400
我还提出了以下备选方案,这是因为我的设置已经与Spark环境相关联,这是一个令人高兴的情况:

def utc_seconds(input, tz):
  query = "select unix_timestamp(to_utc_timestamp('{dt}', '{tz}'))" \
            .format(dt = input, tz = tz)
  return spark.sql(query).collect()[0][0]

(即,将can踢到更友好的语言并收集结果)

您可以使用datetime
timestamp
获取历元时间

from datetime import datetime
import pytz

def utc_seconds(str_dt, timezone):
    timezone = pytz.timezone(timezone)
    dt = datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S')
    dt_timezone = timezone.localize(dt)

    return int(dt_timezone.timestamp())

utc_seconds('2018-02-11 00:00:00', 'Asia/Singapore')
# 1518278400

这不正是你想要的吗?我没有一个
datetime
对象作为输入(
datetime(2012,8,28,19,33,50)
,在引用的答案中)@UdayrajDeshmukh,这个答案可以勉强使用;感觉很难看,这真的是最简单的方法吗<代码>(pytz.timezone('Asia/Singapore').localize(解析(“2018-02-11 00:00:00”),is_dst=None)-datetime.datetime(1970,1,1,tzinfo=pytz.utc)).total_seconds()不知道我在搜索中怎么漏掉了时间戳,谢谢,更干净了。
from datetime import datetime
import pytz

def utc_seconds(str_dt, timezone):
    timezone = pytz.timezone(timezone)
    dt = datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S')
    dt_timezone = timezone.localize(dt)

    return int(dt_timezone.timestamp())

utc_seconds('2018-02-11 00:00:00', 'Asia/Singapore')
# 1518278400