1

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進数から日時に戻すなど、これを行うより効率的な方法はありますか?

4

3 に答える 3

1

私は以下を使用しています:

public static string ToDecimalForMySql(System.DateTime dateTime)
{
    return dateTime.toString("yyyyMMddHHmmss.fff");
}

上記の関数の戻り値の型は、10 進数ではなく文字列であることに注意してください。これは、SQL クエリ文字列で直接使用できます。

MySQL から取得するには、次を使用するのが最も効率的であることがわかりました。

SELECT CONCAT('',DecimalDateTimeField) FROM table [where clause etc]

次に C# で、MySQLDataReader (変数名 "rs") を使用していると仮定します。

DateTime dt = DateTime.Parse((string)rs[0]);
于 2012-08-08T08:25:16.973 に答える
0

日時を取得して、各要素、da、y時間、分、秒、ミリ秒をmysqlのテーブル内の個別のセルに保存できませんでした。次に、送信する前に日付/時刻を分割する関数と、取得時に再フォーマットする関数が必要になります。

于 2012-05-07T16:59:01.733 に答える
0

数値の日時を、1970 年 1 月 1 日 UTC の午前 0 時からの秒数を表すエポックタイムスタンプとして表すことをお勧めします。

DateTimeオブジェクトをエポック タイムスタンプに変換するにはnew DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)、問題のオブジェクトから (UTC として) 減算し、結果のTimeSpanオブジェクトをその に変換する必要があり.TotalSecondsます。

逆に、エポック タイムスタンプ (ここでも、'1970-01-01 00:00:00' からの小数秒) がDateTime、 を介してエポックを表すオブジェクトに追加されますAddSeconds

たとえば、この質問を参照してください。

利点:このアプローチは、MySQL 関数 FROM_UNIXTIME() でうまく機能します。また、UNIX 系の同僚からはオリーブの枝として認識され、分数フィールドが日時の測定値としてすぐに認識されます。

于 2012-05-07T19:29:12.490 に答える