Sqlite 在web sql中存储日期时间值

Sqlite 在web sql中存储日期时间值,sqlite,web-sql,Sqlite,Web Sql,我对Web SQL(SQLite?)中的DateTime字段类型感到困惑 我应该以毫秒为单位将日期/时间值存储为getTime(),还是以YYYY-MM-DD HH:MM:SS:SSS字符串为单位 如果以毫秒为单位存储,我应该使用什么字段类型?通常,我会使用格式和文本列来保存它们。SQLite没有任何本机时间类型,但其本机使用ISO 8601格式: 所有五个日期和时间函数都将时间字符串作为参数。时间字符串后跟零个或多个修饰符。函数的第一个参数也是格式字符串 日期和时间函数使用IS0-8601日期

我对Web SQL(SQLite?)中的DateTime字段类型感到困惑

我应该以毫秒为单位将日期/时间值存储为getTime(),还是以YYYY-MM-DD HH:MM:SS:SSS字符串为单位

如果以毫秒为单位存储,我应该使用什么字段类型?

通常,我会使用格式和
文本
列来保存它们。SQLite没有任何本机时间类型,但其本机使用ISO 8601格式:

所有五个日期和时间函数都将时间字符串作为参数。时间字符串后跟零个或多个修饰符。函数的第一个参数也是格式字符串

日期和时间函数使用IS0-8601日期和时间格式的子集。date()函数以以下格式返回日期:YYYY-MM-DD。time()函数以HH:MM:SS的形式返回时间。函数的作用是:返回“YYYY-MM-DD HH:MM:SS”

因此,如果您需要在数据库中操作时间戳(您可能迟早会这样做),那么您需要使用
YYYY-MM-DD HH:MM:SS
字符串

如果您不会在数据库中操作时间戳(除了简单的比较),那么您可能可以毫不费力地使用seconds-since-epoch整数。还请注意,有时您可以在本机上使用“自历元起秒数”值:

“unixepoch”修饰符(11)仅在紧跟在DDDD格式的时间字符串之后时有效。此修饰符导致DDDD不像通常那样被解释为儒略日数,而是被解释为Unix时间,即自1970年以来的秒数。如果“unixepoch”修饰符不遵循表示自1970年以来秒数的DDDD形式的时间字符串,或者如果其他修饰符将“unixepoch”修饰符与先前的DDDD分开,则行为未定义。由于使用64位整数的实现带来的精度限制,“unixepoch”修饰符仅适用于0000-01-01 00:00:00和5352-11-01 10:52:47之间的日期(unix时间为-62167219200到10675199167)

所以你可以说:

SELECT datetime(1092941466, 'unixepoch');
然后返回
'2004-08-19 18:51:06'
。指定
'unixepoch'
修饰符有点麻烦,当您不可避免地忘记它时,会导致有趣的事情发生:

-- 1333482187 is 2012-04-03 19:43:07
sqlite> select strftime('%m', 1333482187, 'unixepoch');
04
sqlite> select strftime('%m', 1333482187);
43
通常情况下,真正的答案是这取决于ISO 8601字符串,但它可能是您最好的选择。

选择convert(varchar,myDateTime,126)作为myDateTime