Python 将日期时间字符串、时区转换为历元秒
我有一个看似简单的问题,但却找不到直截了当的答案。我想写一个函数,以两个字符串作为输入,并给出一个整数作为输出 在R中,函数将非常简单: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
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