浮点值表示日期和时间,精确到毫秒:
import datetime
float_time = 1485538757.29289
print datetime.datetime.fromtimestamp(float_time)
打印:
2017-01-27 09:39:17.292890
将其存储在db:
中from sqlalchemy import Column, DateTime
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class MyTable(Base):
__tablename__ = 'mytable'
time_created = Column(DateTime, nullable=False)
但保存的值会向下舍入为2017-01-27 09:39:17
(来自2017-01-27 09:39:17.292890
)。有解决方案吗?
答案 0 :(得分:2)
这取决于您正在使用的SQL数据库。它们的精确度不同:
PostgresQL :Default 1 microsecond。
MySQL :默认为1秒。 Millisecond / microsecond precision optional之后的version 5.6.4
。
MariaDB :默认为1秒。毫秒/微秒精度optional since version 5.3
。
Transact-SQL (Microsoft SQL):Rounded to increments of .000, .003, or .007 seconds
SQLite :日期时间可以存储为具有任意精度的字符串,但"only the first three digits are significant"。
Oracle :默认1微秒。 Optional precision to 1 nanosecond
注意:
答案 1 :(得分:0)
最重要的信息是您在原帖中错过的信息:哪个数据库?既然你后来提到了它的MariaDB,那你就去吧:
来源:https://mariadb.com/kb/en/mariadb/microseconds-in-mariadb/
由于MariaDB 5.3,TIME,DATETIME和TIMESTAMP类型,以及 时态函数,CAST和动态列已得到支持 微秒。可以在以下时指定列的日期时间精度 使用CREATE TABLE创建表,例如:
CREATE TABLE example( col_microsec DATETIME(6), col_millisec TIME(3) );
通常,可以为任何TIME指定精度, DATETIME或TIMESTAMP列,在括号中,在类型名称后面。 日期时间精度指定小数点后的位数 点,可以是0到6之间的任何整数。如果没有精度 由于向后兼容性原因,指定它被假定为0。
另一个例子:
SELECT CAST('2009-12-31 23:59:59.998877' as DATETIME(3));
-> 2009-12-31 23:59:59.998