我timestamptz在PostgreSQL中有一个时区感知字段.当我从表中提取数据时,我想立即减去时间,以便我可以得到它的年龄.
我遇到的问题是,无论是datetime.datetime.now()和datetime.datetime.utcnow()似乎回到时区不知道时间戳,这导致我得到这个错误:
TypeError: can't subtract offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这种情况(最好不使用第三方模块).
编辑:感谢您的建议,但是尝试调整时区似乎给了我错误..所以我只是在PG中使用时区不知道的时间戳并始终使用:
NOW() AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud)
这样我的所有时间戳都默认为UTC(尽管这样做更烦人).
如何将字符串的DataFrame列(以dd/mm/yyyy格式)转换为日期时间?
我有以下内容:
> date1
Timestamp('2014-01-23 00:00:00', tz=None)
> date2
datetime.date(2014, 3, 26)
Run Code Online (Sandbox Code Playgroud)
我读了这个答案我可以pandas.to_datetime()用来转换Timestamps为datetime对象,但它似乎不起作用:
> pd.to_datetime(date1)
Timestamp('2014-01-23 00:00:00', tz=None)
Run Code Online (Sandbox Code Playgroud)
为什么?如何在这两种格式之间进行转换?
我无法将python datetime64对象转换为字符串.例如:
t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400')
Run Code Online (Sandbox Code Playgroud)
成:
'2012.07.01' as a string. (note time difference)
Run Code Online (Sandbox Code Playgroud)
我已经尝试将datetime64对象转换为datetimelong然后转换为字符串,但我似乎得到了这个错误:
dt = t.astype(datetime.datetime) #1341100800000000000L
time.ctime(dt)
ValueError: unconvertible time
Run Code Online (Sandbox Code Playgroud) 我有一个Pandas列的Timestamp数据
In [27]: train["Original_Quote_Date"][6]
Out[27]: Timestamp('2013-12-25 00:00:00')
Run Code Online (Sandbox Code Playgroud)
如何检查这些对象与datetime.date该类型对象的等价性
datetime.date(2013, 12, 25)
Run Code Online (Sandbox Code Playgroud) 这是一组日期时间值:
array = np.array(['2016-05-01T00:00:59.3+10:00', '2016-05-01T00:02:59.4+10:00',
'2016-05-01T00:03:59.4+10:00', '2016-05-01T00:13:00.1+10:00',
'2016-05-01T00:22:00.5+10:00', '2016-05-01T00:31:01.1+10:00'],
dtype=object)
Run Code Online (Sandbox Code Playgroud)
pd.to_datetime 非常擅长推断日期时间格式.
array = pd.to_datetime(array)
print(array)
DatetimeIndex(['2016-04-30 14:00:59.300000', '2016-04-30 14:02:59.400000',
'2016-04-30 14:03:59.400000', '2016-04-30 14:13:00.100000',
'2016-04-30 14:22:00.500000', '2016-04-30 14:31:01.100000'],
dtype='datetime64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)
如何动态确定pd.to_datetime推断出的日期时间格式?有点像:( %Y-%m-%dT...抱歉,我的约会时间非常糟糕).
我基本上面对这里发布的相同问题:在datetime,Timestamp和datetime64之间转换
但我找不到令人满意的答案,我的问题是如何从numpy.datetime64类型中提取日期时间:
如果我尝试:
np.datetime64('2012-06-18T02:00:05.453000000-0400').astype(datetime.datetime)
Run Code Online (Sandbox Code Playgroud)
它给了我:1339999205453000000L
我当前的解决方案是将datetime64转换为字符串,然后再次转到datetime.但这似乎是一个非常愚蠢的方法.
我想转换
['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"]
Run Code Online (Sandbox Code Playgroud)
进入Numpy日期时间对象.
import numpy as np
[np.datetime64(x) for x in ['17-10-2010 07:15:30', '13-05-2011 08:20:35', "15-01-2013 09:09:09"]]
Run Code Online (Sandbox Code Playgroud)
提出来ValueError: Could not convert object to NumPy datetime.但是,以下按照我的意图工作
[np.datetime64(x) for x in ['2010-10-17 07:15:30', '2011-05-13 08:20:35', "2012-01-15 09:09:09"]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能将我的数组,与符合格式Numpy的datetime64功能要求?
我使用Numpy版本1.7.0.在python 3.4中
一直在处理在datetime,Timestamp和datetime64之间转换中列出的选项; 但是,numpy的isnat()似乎无法识别日期时间对象,或者我错过了函数输入所需的其他类型的日期时间对象.
以下是数据框的概述:
>>> time_data.head()
Date Name In AM Out AM \
0 2017-12-04 AUSTIN LEWIS 1900-01-01 07:03:11 1900-01-01 12:01:50
1 2017-12-05 AUSTIN LEWIS 1900-01-01 05:24:07 1900-01-01 12:08:21
2 2017-12-06 AUSTIN LEWIS 1900-01-01 11:58:32 NaT
3 2017-12-07 AUSTIN LEWIS 1900-01-01 08:31:23 1900-01-01 12:49:51
4 2017-12-11 AUSTIN LEWIS 1900-01-01 06:55:21 1900-01-01 12:02:08
In PM Out PM Sick Time
0 1900-01-01 12:28:52 1900-01-01 17:34:53 NaT
1 1900-01-01 12:35:12 1900-01-01 16:15:17 NaT
2 NaT 1900-01-01 23:59:01 NaT
3 1900-01-01 13:18:34 1900-01-01 …Run Code Online (Sandbox Code Playgroud) 有没有办法在我指定的日期检查特定时区是否在夏令时?
test_dt = datetime(year=2015, month=2, day=1)
pst = pytz.timezone('America/Los_Angeles')
test_dt = pst.localize(test_dt)
# should return False
is_day_light_saving(test_dt)
Run Code Online (Sandbox Code Playgroud)