MySQL 时间、日期时间和时间戳类型不保留毫秒。但是,MySQL 确实支持使用 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);
}
有没有更有效的方法来做到这一点,也许使用位字段从十进制转换回日期时间?