Java Web Service 以 long 傳遞操作時間(System.currentTimeMillis(),1970-01-01 起毫秒數),存入 MySQL TIMESTAMP。.NET 客戶端調用時需生成相同格式的時間戳。
DateTime.Ticks:0001-01-01 00:00:00 起的**百納秒數**(1 Tick = 100 ns = 0.0001 ms)。// C# 獲取與 Java currentTimeMillis() 等價的長整型
long javaMillis = (DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) / 10000;
// 或者使用 TimeSpan(更語義化)
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long javaMillis = (long)ts.TotalMilliseconds;
必須使用 DateTime.UtcNow**,而非 DateTime.Now。
原因:Java 時間戳基於 UTC。若用 Now(本地時間),東八區會相差 8 小時(28800000 ms),導致服務端存入時間偏移。
DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(javaLong);
TIMESTAMP(MySQL)或 DATETIMEOFFSET(SQL Server),保留時區信息。掌握這對轉換,即可消除 Java/.NET 異構系統間的時間一致性隱患。