看板 Soft_Job 關於我們 聯絡資訊
今天遇到了一個問題,就是關於OS系統和C#中的Datetime.tostring的問題 一般我自己寫程式是用.tostring("yyyy/MM/dd") 中文OS的輸出就是很正常的2015/04/01這樣,但是今天幫客戶裝系統遇到了一個問題 就是作業系統的OS是英文版(國外的跨國公司) 結果tostring("yyyy/MM/dd")的輸出格式變成這樣2015.04.01 如果存SQL的時候格式是Datetime或是轉換過存字串20150401八碼這樣其實不會有什麼問 題 偏偏踩到不知道哪個潛貝留的坑(還好大一坑,到處都是) SQL資料給我存字串 -> 2015/04/01這樣 ,結果程式就掛掉了 (變成SQL的where條件是2015.04.01,完全撈不到資料,諸如此類的問題) 當然是可以改程式啦,不過考慮到系統本身就沒考慮到這方面的問題,怕會有其他地方出 錯,想說還是調整OS的部份讓他能夠輸出正確 (當然如果真的沒辦法只好調整程式了) 我地區、日期時間格式等都調整了,OS右下角顯示的日期也是2015/04/01,但是程式裡面 的tostring("yyyy/MM/dd")的輸出還是2015.04.01 系統語言還是ENGILSH,他們IT堅持不給我改這個,想請問 1.是不是改了系統語言就會照我想的輸出2015/04/01這樣呢? 2.還是說還有哪裡的OS設定我漏了調整了? 還請有相關經驗的人回答 P.S. OS是Server 2012 R2、幫客戶安裝的是IIS架的網站 有去GOOGLE到OS可以設定日期分隔符號,可是那好像是Server 2003才有的設定,我Serve r 2012 R2的作業系統找不到這個設定 回報一下,最後是調整IIS的.NET全球化設定改為中文台灣解決問題 -- 我覺得驅逐艦是艦隊裡最萌的艦種了 潛航戰正輕航重重輕 ▁▁▁▁ ◢ 真 其他的都應該重造 水空艦規空空巡雷巡██ /- 。 艦戰 空母巡洋裝洋□–□如果各位有興趣的話可以一起成為驅逐艦 艦 母 洋艦巡艦 但是要經過蘿ㄏㄨ 改造 艦 洋 因為我們只會接受蘿莉 絕對不會接受外觀超過14歲的BBA //█◣ ※ 發信站 批踢踢實業坊 來自 ※ 文章網址 ※ 編輯 ※ 編輯 ※ 編輯 manaup: poi? 04/01 21:02 BBA
azureblaze: Thread.CurrentThread.CurrentCulture改掉?04/01 21:06
azureblaze: 給電腦讀的東西格式最好還是設定一下吧04/01 21:08
當時也沒想到(沒遇過這方面的問題) 我是以為yyyy/MM/dd 的 / 就是指文字字符/,結果去查了才發現 / 是代表系統的日期分 隔符號,定值/字符應該是給yyyy\\/MM\\/dd ※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:10:04
gn00273680: 好特別唷~應該還是改程式比較好吧?! 04/01 21:09
有需要還是會改啦,只是想問問有沒有不改程式的解決方案 明天去測一下IIS的全球化設定改成台灣中文看看 (忘記說幫客戶裝的程式是網站) ※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:11:31 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:12:01 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:12:42
totte: 不改程式,您要想辦法讓DateTimeFormatInfo.CurrentInfo04/01 22:16
totte: 抓到的是zh-TW 如圖 http://imgur.com/K1siFXo04/01 22:17
totte: 左半邊是.Net原始程式04/01 22:17
意思是說直接去修改.tostring嗎XD 倒是個很簡潔的方式,我還沒想過說XD ※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:31:51 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:32:37
totte: 沒有喔 那個DateTime.cs是反組譯看出來的 您基本上改不到吧04/01 22:41
totte: 我的意思是您在OS做的設定 要讓DateTimeFormatInfo.Current 04/01 22:42
totte: .CurrentInfo 抓到的是zh-TW04/01 22:42
robler: 複寫掉或是寫一個新的不就得了=w=04/01 22:42
totte: 我剛剛再追了一下CurrentInfo取得方式 就是azureblaze建議04/01 22:43
totte: http://imgur.com/1pSKehd 04/01 22:47
主要就是因為想到的都改了,還是不知道OS該去哪裡改(不改系統語言的情況下)
leicheong: DateTime.ToString("yyyy/MM/dd",CultureInfo04/01 22:48
leicheong: .InvariantCulture)就好... btw為甚麼不直接給日期?04/01 22:48
那是舉例啦XD TimeNow不是固定的時日 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:56:23 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:59:04
leicheong: 我指為什麼不存DateTime進database? UI的事不該在數據04/01 23:00
leicheong: 層面上解決...04/01 23:01
那就是要改程式啦,基本上只要決定要動程式,這個問題就沒什麼好問的了,會問是想說 看看有沒有辦法不動程式的情況下處裡囉,存Datetime格式當然是對的,只是今天不是追 究為啥不這樣做(挖坑的都不知道十幾年前死到哪去的的老鬼了) 會有這種問題就是因為有些王X蛋不照規定寫程式啊,要馬存Datetime要馬存八碼 Datetime不管是2014/04/01還是2014.04.01還是2014-04-01吃得下去,出來也是直接轉成 Datetime作業,八碼就Convert.todatetime(convert.toint32("0000/00/00")),也是沒 有問題 就是有人存帶分隔符號的時間字串才出包的XD 重購的新系統是多國語言版本,有考慮到這部分,只是還是有用舊程式的客戶啊,要費工 去改實在有點雞肋 (尤其這個客戶又很機歪,改什麼程式做什麼都要凹不付錢,根本毫無$可言) 與其花時間去弄這個不如去寫其他客戶的程式 <-很現實的問題
totte: http://goo.gl/jBSxYY 參考這篇看看吧04/01 23:03
leicheong: 另外這種在佈雷的程式碼沒事別動CurrentCulture...否則04/01 23:03
leicheong: 這邊沒事了另一邊可能有bug彈出來...04/01 23:04
※ 編輯: a47135 (114.42.208.136), 04/01/2015 23:18:14 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 23:27:37 ※ 編輯: a47135 (114.42.208.136), 04/01/2015 23:32:34 ※ 編輯: a47135 (60.245.65.202), 04/02/2015 09:27:06
doomdied: 如果不想動schema,自己寫function去做datetime to str04/02 18:34
doomdied: 自己把year+month+day連起來,就不會有問題了,一勞永逸04/02 18:34
doomdied: 不過最好的做法是改schema,存datetime,別存string 04/02 18:35
allenxxx: 客戶要凹你不會往上回報?上面認帳才做,有權自己決定? 04/02 18:38
allenxxx: 我從不作人情,要加東西找我老闆 04/02 18:38
就是老闆給凹我才會去幫他們裝程式的好嗎 我的意思是這種客戶應付一下就好 ※ 編輯: a47135 (49.216.233.147), 04/02/2015 18:58:21
robler: 當然是老闆要做人情給客戶凹員工阿...有點常識吧04/02 19:43
robler: 員工吃飽了撐者作人情給客戶? 04/02 19:44
你是回樓上a先生還是我啊XD ※ 編輯: a47135 (49.216.235.88), 04/02/2015 19:46:43