[問題] c# datetime ticks轉換

看板AndroidDev作者 (沒有名字的怪物)時間7年前 (2017/05/13 15:20), 7年前編輯推噓0(0015)
留言15則, 4人參與, 最新討論串1/1
各位大大 請教一下C#的Datetime ticks該怎麼轉換到 java的去呢?? 找了一些文章 C# & JAVA的基準值不一樣 也找了另一個函式庫Joda-time,但不曉得如何轉換 故上來請教高手 謝謝 C#範例 static string GetDateTime() { DateTime now = DateTime.Now; DateTime withoutYear = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Se co long t = withoutYear.Ticks / (long)20000000; return ((UInt32)t).ToString("X000000"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.217.210 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1494660040.A.411.html

05/14 01:07, , 1F
不能C# tick <-> UTC string <-> JAVA tick這樣嗎?
05/14 01:07, 1F

05/14 01:55, , 2F
java或是其他用unix time的系統是從1970/1/1起算的
05/14 01:55, 2F

05/14 01:57, , 3F
C#的DateTime是從1/1/1起算,自己減掉這個時間差就可以
05/14 01:57, 3F

05/14 02:05, , 4F
不過單位要自己處理
05/14 02:05, 4F

05/14 02:12, , 5F
類似一樓說的用某種時間字串轉換也是方法,通常用ISO 8601
05/14 02:12, 5F

05/14 02:18, , 6F
或是你也可以用自訂的
05/14 02:18, 6F

05/14 02:19, , 7F
但是C#的Ticks單位是100ns,java的Date只支援到1ms
05/14 02:19, 7F

05/14 02:22, , 8F
你現在這個寫法/20000000是轉成單位為2秒喔...
05/14 02:22, 8F

05/14 02:23, , 9F
/10000才是同java的Date.getTime,還要加起始時間差
05/14 02:23, 9F

05/16 22:14, , 10F
糟糕,數學太差……
05/16 22:14, 10F
所以我只要把java的ticks / 10000嗎? ※ 編輯: areyo (122.121.219.46), 05/16/2017 22:21:08

05/17 18:21, , 11F
我覺得C#自己要這樣玩其實OK 但是也內建個函數幫忙轉嘛....
05/17 18:21, 11F

05/17 21:35, , 12F
.NET 4.6有新增這個內建函數了
05/17 21:35, 12F

05/17 21:36, , 13F
DateTimeOffset.From/ToUnixTimeSeconds/Milliseconds
05/17 21:36, 13F

05/17 21:36, , 14F
java的就是這個UnixTimeMilliseconds
05/17 21:36, 14F

05/17 21:39, , 15F
用算的好像 (C# Ticks - 621355968000000000)/10000 = java
05/17 21:39, 15F
文章代碼(AID): #1P5hF8GH (AndroidDev)
文章代碼(AID): #1P5hF8GH (AndroidDev)