iT邦幫忙

0

請問為什麼這段日期計算結果會是錯誤呢?

c#
  • 分享至 

  • xImage

最近在做一段跟日期有關的計算

我發現我計算錯誤,但目前看起來應該是沒問題,但確實是錯誤

這是我的程式碼

            var CodeString1 = "ABCDE2022021522";
            string DateSubStr = CodeString1.Substring(5, 10);
            int Year = int.Parse(DateSubStr.Substring(0, 4));
            int Month = int.Parse(DateSubStr.Substring(4, 2));
            int day = int.Parse(DateSubStr.Substring(6, 2));
            int hour = int.Parse(DateSubStr.Substring(8, 2));

            DateTime BarCodeDt = new DateTime(Year, Month, day, hour,00,00);
            var DateTimeNow = DateTime.Now;
            var  ts = new DateTime(DateTimeNow.Ticks - BarCodeDt.Ticks);
            Console.WriteLine(ts.Day);

看中斷那個ts感覺就怪怪
https://ithelp.ithome.com.tw/upload/images/20220421/20110132jPiXo7Nzzp.jpg

可以幫我看一下我是錯在哪裡嗎?

powerc iT邦研究生 5 級 ‧ 2022-04-22 09:15:37 檢舉
結果看起來沒問題,倒是用字串拆解去轉時間不太建議這作法,你可以在第三列就直接DateTime.Parse了
canrong iT邦新手 2 級 ‧ 2022-04-22 10:21:07 檢舉
不知道你想要的輸出是什麼,DateTime.Day屬性官方說明參照https://docs.microsoft.com/zh-tw/dotnet/api/system.datetime.day?view=net-6.0,下面已經有人回答DateTime可以使用Subtract 並回傳TimeSpan 如果想要直接DateTime相減則可以參考 TimeSpan 官方文件上的範例 https://docs.microsoft.com/zh-tw/dotnet/api/system.timespan?view=net-6.0
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
rainbowrain
iT邦新手 2 級 ‧ 2022-04-22 10:39:50
最佳解答

這個才是你要的

TimeSpan ts = DateTimeNow - BarCodeDt;
Console.WriteLine(ts.Days);

一天的 ticks 是 864,000,000,000
new DateTime() 傳 ticks 當參數的話是從 0001/01/01 00:00:00 開始起算

tenno081 iT邦研究生 4 級 ‧ 2022-04-22 10:45:38 檢舉

真的是這樣,謝謝

0
Bochin
iT邦新手 4 級 ‧ 2022-04-22 10:32:14

你把Ticks丟進new DateTime裡面得出的是某一天的「日期」。
算時間差可以用Subtract
var ts = DateTime.Now.Subtract(BarCodeDt);
我個人比較偏好強型別,如果有明確宣告型別就會知道一個傳回TimeSpan, 一個傳回Datetime. IDE在你輸入的當下就會告訴你問題。

我要發表回答

立即登入回答