iT邦幫忙

0

C#透用SQL取得時間資料卻與實際存在資料庫的資料不同的問題,如DB為2022-11-25,C#取得為2022-11-2

  • 分享至 

  • xImage

我原先有寫一個爬蟲程式會去抓資料並把時間戳記如1669345247透過以下程式轉換,再用dt.ToString("yyyy/MM/dd")把值存至DB裡。

DateTime ST = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); 
DateTime dt = ST.AddSeconds(scanner_start);

現在發現從DB取值時某些資料可能會與實際存在DB的不同,像是DB存的是2022-11-25,欄位資料類型是date,但我將DB存的資料取出時卻顯示2022/11/2 00:00:00,感覺像是他少取一位數。
想問這樣的話是我當初沒有把完整的時間包含時毫秒,存進DB的關係還是我轉換上出了甚麼問題嗎?

看更多先前的討論...收起先前的討論...
johncoc iT邦新手 3 級 ‧ 2022-12-02 10:36:45 檢舉
是用什麼方法取DB資料?
我用sql指令的方式去取得然後用我的class去接那些資料,因為db是設date的型態,c# class我也用datetime去接用string接會報錯。 db改成datetime的型態就能正確地取出了不太懂
johncoc iT邦新手 3 級 ‧ 2022-12-02 11:56:28 檢舉
取資料的程式碼是怎麼寫的
johncoc iT邦新手 3 級 ‧ 2022-12-02 11:57:06 檢舉
剛剛測試datetime接date沒這個問題
對阿我可以接但有些資料可能有誤不夠完整,2022-11-25接datetime 會變2022-11-2T00:00:00.000Z 這種 。這樣我c#後端傳到前端就變到2022-11-02了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
allenlwh
iT邦高手 1 級 ‧ 2022-12-02 09:06:57

DB的資料型態,如果是Date,那就是2022-12-02
如果是Datetime,那就是2022-11-30 15:56:22.153

https://ithelp.ithome.com.tw/upload/images/20221202/20033493XViL1JfaSC.jpg

https://ithelp.ithome.com.tw/upload/images/20221202/20033493jo2EH3obSM.jpg

那我是不是重新儲存阿,改存成datetime or nvarchar

untitled iT邦新手 5 級 ‧ 2022-12-03 09:00:58 檢舉

如果下sqlcommand可以直接改用CONVERT(date,@a)取日期也行

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-12-02 09:55:08

請直接下 SQL 查詢該「日期」(其實只是字串)欄位資料
1.如果是 2022/11/25 - 就是 C# 抓資料出錯
2.如果是 2022/11/2 - 就是當初寫進資料庫時出錯

我猜啦
可能是第 2 種情形
猜錯勿見怪

我在MSSQL直接下SQL查詢是2022-11-25,C#去接資料則是2022-11-2 T00:00:00...;我在想應該是我c# Class是宣告成DateTime去接。剛剛去重建一個table並將資料庫的類型改成datetime就變取得2022-11-25了,等等再多試幾次好了

0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-30 01:27:03

把完整的時間包含時毫秒

DateTime ST = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); 
DateTime dt = ST.AddSeconds(scanner_start);
string dateString = dt.ToString("yyyy-MM-dd HH:mm:ss");

我要發表回答

立即登入回答