根据http://dev.mysql.com/doc/refman/5.0/en/datetime.html。我必须找到一种方法来转换字符串值' YYYY-MM-DD HH:MM:SS'到时间戳int。
我抬头看了python的文档。
我试过了:
print(time.strptime('2013-01-12 15:27:43', '%Y-%m-%d %H:%M:%S'))
python给我一个这样的结果。
time.struct_time(tm_year = 2013,tm_mon = 1,tm_mday = 12,tm_hour = 15,tm_min = 27,tm_sec = 43,tm_wday = 5,tm_yday = 12,tm_isdst = -1)
我试过这个将时间戳转换为YYYY-MM-DD HH:MM:SS格式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.time()))
python给我一个类型错误。
我只使用时间戳来计算时间和日期,我希望已经有了python方式,简单高效,不必创建临时数据。
根据答案,我写了两种方法。希望它会有所帮助
import time
def convertTimestampToSQLDateTime(value):
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(value))
def convertSQLDateTimeToTimestamp(value):
return time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S'))
答案 0 :(得分:40)
如果我没有正确理解,请尽快更新,但这里有一些可能有用的例子。请注意,这会使用datetime
模块而不是time
。
>>> import datetime
我们在此设置了一个示例时间戳ts
和一种格式f
:
>>> ts = '2013-01-12 15:27:43'
>>> f = '%Y-%m-%d %H:%M:%S'
与您上面所做的类似,我们使用strptime
函数(来自datetime.datetime
)根据格式参数将字符串转换为datetime
对象:
>>> datetime.datetime.strptime(ts, f)
datetime.datetime(2013, 1, 12, 15, 27, 43)
现在反过来 - 在这里我们使用datetime.datetime.now()
将当前时间作为datetime
对象获取:
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 1, 12, 0, 46, 54, 490219)
在datetime
的情况下,strftime
方法实际上是在datetime
对象本身上调用的,格式参数作为参数:
>>> now.strftime(f)
'2013-01-12 00:46:54'
在您的情况下,您收到错误的原因是因为time.time()
返回了一个浮点数:
>>> time.time()
1357980846.290231
但是time.strftime
需要一个time
元组,类似于上面的内容。如果没有进入令人发狂的时间螺旋,time.localtime()
之类的函数将返回前面提到的time
元组,并将按预期返回:
>>> now = time.localtime()
>>> now
time.struct_time(tm_year=2013, tm_mon=1, tm_mday=12, tm_hour=0, tm_min=55, tm_sec=55, tm_wday=5, tm_yday=12, tm_isdst=0)
>>> f = '%Y-%m-%d %H:%M:%S'
>>> time.strftime(f, now)
'2013-01-12 00:55:55'
答案 1 :(得分:0)
我只是添加此类,以可能节省下一个家伙一点时间。如果有人觉得这有用,请提高RocketDonkey的答案。
## dev on v3.7.6
from datetime import datetime
from time import mktime, time
class Time:
'''\
*Convenience class for easy format conversion*\n
Accepts time() float, datetime object, or SQL datetime str.\n
If no time arg is provided, object is initialized with time().\n
id kwarg can be used to keep track of objects.\n
Access formats as instance.t, instance.dt, or instance.sql.\
'''
f = '%Y-%m-%d %H:%M:%S'
def __init__(self, *arg, id=None) -> None:
self.id = id
if len(arg) == 0:
self.t = time()
self.dt = self._dt
self.sql = self._sql
else:
arg = arg[0]
if isinstance(arg, float) or arg == None:
if isinstance(arg, float):
self.t = arg
else:
self.t = time()
self.dt = self._dt
self.sql = self._sql
elif isinstance(arg, datetime):
self.t = arg.timestamp()
self.dt = arg
self.sql = self._sql
elif isinstance(arg, str):
self.sql = arg
if '.' not in arg:
self.dt = datetime.strptime(self.sql, Time.f)
else:
normal, fract = arg.split('.')
py_t = datetime.strptime(normal, Time.f)
self.dt = py_t.replace(
microsecond=int(fract.ljust(6, '0')[:6]))
self.t = self.dt.timestamp()
@property
def _dt(self) -> datetime:
return datetime.fromtimestamp(self.t)
@property
def _sql(self) -> str:
t = self.dt
std = t.strftime(Time.f)
fract = f'.{str(round(t.microsecond, -3))[:3]}'
return std + fract
def __str__(self) -> str:
if self.id == None:
return self.sql
else:
return f'Time obj "{self.id}": {self.sql}'
def test():
def test_one(*arg):
t = Time(*arg, id=type(*arg))
print(t)
print(t.t)
print(t.dt)
sql = '2020-01-22 15:30:33.433'
time_float = 1579927395.3708763
dt_obj = datetime.now()
for datum in [sql, time_float, dt_obj, None]:
test_one(datum)
if __name__ == '__main__':
test()