MySQL の time、datetime、および timestamp タイプはミリ秒を保持しません。ただし、MySQL は decimal(17,3) を使用した日時情報の保存をサポートしています。(.net) datetime と decimal の間で前後に変換する次の c# コードを思いつきました。
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);
}
おそらくビットフィールドを使用して10進数から日時に戻すなど、これを行うより効率的な方法はありますか?