C 標準庫為什麼不提供乙個方便的日期時間庫?

時間 2021-05-07 03:27:26

1樓:望山

機器內部表示的日期時間,現有庫已經基本夠用了。麻煩的是處理字串表示的日期時間。但是這個問題英國和美國都不同(10-08-09是哪年幾月幾號?

),要確定使用者是哪中國人、使用者在哪國地方、使用者的程式打算給哪中國人用、使用者的程式的使用者在哪國地方,完全超出了C++語言的能力,需要作業系統提供大量資訊,而不同作業系統提供此類資訊的方式各不相同,並且都不完善。

2樓:starwlstar

c++11也有chrono,但還是太難用了。

stl某些設計真的太辣雞,冗餘複雜難用。

chrono我反正沒用,還是自己封裝的。

3樓:acebear

2023年:世界無線電會議在11月決議繼續沿用閏秒,2023年再行檢討

2023年潤了1秒,2023年又潤了1秒,2023年至今尚沒有潤在潤秒這個事情搞定前,不好搞啊

如果你的程式是寫在GPS/北斗接收機裡的 ,計算座標位置就需要考慮到潤秒的問題,不然你的接收機計算出來的位置會被人罵死

4樓:黃亮anthony

C語言中提供那個簡單的日期時間庫,已經可以處理絕大多數場景。

它的時間點是用time_t表示,一般來說它是乙個秒值,但也有例外。它能做的事情不多,只用於比較兩個時間的先後。比如用difftime取兩個時間點之間的差值秒。

取當前時間的函式是time(NULL),注意那個空值。

日期和時間差異類是struct tm,它可以通過mktime轉化成乙個時間點。

而從時間點time_t型別得到struct tm,常用localtime,或者不考慮時區時用gmtime。

最常用的當然還有strftime可以把struct tm表示為字串。而從字串轉成struct tm則需要麻煩sscanf函式,需要寫乙個格式說明。或者用posix的strptime函式。

C++11的話,可以用新增的get_time/put_time與stream一起使用。

這些看起來平淡無奇,那麼最神奇的地方在mktime的struct tm引數可以接受不合理的資料,比如取100天以後的時間點,基本方法是:

time_t now = time(nullptr);

tm* date = gmtime(&now);

date->tm_mday += 100;

time_t later = mktime(date);

cout << "now: " << put_time(gmtime(&now), "%c %Z") << '\n';

cout << "later: " << put_time(gmtime(&later), "%c %Z") << '\n';

這其實就形成了很好的乙個計算各種時間間隔的函式,計算幾秒,幾天,幾月,幾年前後都可以,因為它同時也修改struct tm這個引數,所以也可以當成乙個求日曆的函式。

在大多數,秒級,時間範圍不大(1970-2038)之間的時間計算,這套簡單的庫都可以完全滿足要求。

返回C執行時內部資料的API ,例如上面的localtime/gmtime,容易被不太看文件的人當成有問題的函式。

而windows下,這些函式使用的內部資料是執行緒專用,它是執行緒安全的。[2]

5樓:XZiar

我其實不太清楚怎麼樣算是方便。

C++11之前就跟C是一樣的狀況,C怎麼做C++就怎麼做。

C++11帶來了chrono,已經具備了強型別的時間運算。

不過往後幾個更新都沒涉及chrono,或許主流C++真的已經跟這種靠近使用者的操作漸行漸遠了(時間的操作是常見的,演算法底層去計算時間很正常。但日期操作就是另一回事了,比較靠近業務層)。

如果說「方便」的目標是格式化、輸入方便的話,這是C++的老大難問題啊,cin、cout做帶格式輸入輸出的彆扭,又不是一天兩天了。

C++20帶來了format,對chrono也有特化,應該會有所改觀吧。

資料庫為什麼不提供直接運算元據的介面

已登出 不就是NoSQL那套嗎 靈活性和簡易性 易用性是很難平衡的。比如平時寫個正則都要哭爹叫娘,但你一條條寫規則,寫自動機來parse又繁瑣得要死。所以這個平衡的任務應該交給開發者,由開發者自己編寫CRUD的細節。 許通 朋友,你聽說過 ElasticSearch嗎?安利一下。滑稽 關係型資料庫 ...

為什麼《集合啦!動物森友會》不提供方便的島嶼建設功能?

哆瑞r 一直以來我一直在吐槽動森各種神坑,島嶼建設不方便,地板要一塊一塊鋪 河流一點一點挖 懸崖一層一層蓋,真的很爆肝。後來想了想這個設定本來就是為了讓你把節奏緩下來。再比如房子搬遷 裝修 公升級,亦或者橋和坡道都要第二天完工而且一天只能修乙個,都是為了讓你對明天有所期待,延長遊戲壽命。第二天會迫不...

為什麼c 沒有一套簡化語法的函式庫?

王旭競 這是問的二進位制串轉ascii吧?因為這事確實不難。但是可能性太多,單位元組 雙位元組 多位元組,endian,指標 string,trim 大小寫.所以這種事自己封裝個貼近工程的二進位制處理庫就好。至於標準,它推薦你用iostream,其實額外好處也很多。 暮無井見鈴 zh.cpprefe...