【发布时间】:2012-05-06 21:05:38
【问题描述】:
MySQL 时间、日期时间和时间戳类型do not preserve milliseconds。但是,MySQL does support storing datetime information using decimal(17,3)。我想出了以下 c# 代码在 (.net) 日期时间和十进制之间来回转换。
public static decimal ToDecimalForMySql(System.DateTime dateTime)
{
return dateTime.Year * 10000000000m + dateTime.Month * 100000000m + dateTime.Day * 1000000m + dateTime.Hour * 10000m + dateTime.Minute * 100m + dateTime.Second + dateTime.Millisecond * 0.001m;
}
public static System.DateTime FromDecimalForMySql(decimal dateTime)
{
long truncated = (long) Math.Truncate(dateTime);
int msecs = (int) (1000 * (dateTime - truncated));
long month;
int day, hour, minute, second;
return new System.DateTime((int) Math.DivRem(truncated, 10000000000, out month), Math.DivRem((int) month, 100000000, out day),
Math.DivRem(day, 1000000, out hour), Math.DivRem(hour, 10000, out minute), Math.DivRem(minute, 100, out second), second, msecs);
}
有没有更有效的方法来做到这一点,也许使用位域将十进制转换回日期时间?
【问题讨论】:
-
MySQL 5.6.4 支持 TIME、TIMESTAMP 和 DATETIME 类型的微秒分辨率。 (见本文末尾bug)
-
可以,但我仍在使用当前普遍可用的版本 5.5.x,它不支持微秒。
标签: mysql datetime timestamp type-conversion precision