MySQL時間,日期時間和時間戳類型do not preserve milliseconds。但是,MySQL does support storing datetime information using decimal(17,3)。我想出了以下c#代碼來在(.net)datetime和decimal之間來回轉換。將日期時間轉換爲十進制數以保留MySQL中的毫秒數
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);
}
是否有更有效的方式來做到這一點,也許使用位字段從十進制轉換回datetime?
MySQL 5.6.4支持TIME,TIMESTAMP和DATETIME類型的微秒分辨率。 (見[bug](http://bugs.mysql.com/bug.php?id=8523)) – pilcrow
它的確如此,但我仍然使用當前通用的版本5.5.x,它可以不支持微秒。 – Jimmy