Bugün bazı zaman fonksiyonları ile çalışıyordum ve %r
(veya %p
) kullanılarak yapılan standart dönüşümün g ++ veya clang ++ üzerinde std::get_time()
aracılığıyla giriş için işe yaramadığını fark ettim. G ++ ve clang ++ için this live code version'a bakın. ,'un Windows altında VC++ ile beklendiği gibi çalıştığı görünmektedir (bkz. Bu closely related question). Ayrıca, etkinin imbue
satırının dahil olup olmadığını da unutmayın. Linux makinemdeki yerel ayar, önemliyse "en_US.UTF-8"
olarak ayarlanmıştır. yorumlayanlar işaret gibistd :: get_time g ++ ve clang ++ içinde mi bozuk?
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <ctime>
int main(){
std::tm t{};
std::stringstream ss{"1:23:45 PM"};
ss.imbue(std::locale(std::cin.getloc(),
new std::time_get_byname<char>("en_US")));
ss >> std::get_time(&t, "%r");
if (ss.fail()) {
std::cout << "Conversion failed\n" << std::put_time(&t, "%r") << '\n';
} else {
std::cout << std::put_time(&t, "%r") << '\n';
}
}
Bu bir libstdC++ sorunu gibi görünüyor. libC++ ile clang bu güzel ayrıştırır. –
@HowardHinnant: Haklısınız (http://coliru.stacked-crooked.com/a/e597ffb8e4d4497e). Soruyu geri almalı mıyım? – Edward
[application] (https://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/bits/locale_facets_nonio.tcc?revision=219012&view=markup&pathrev=219013#l654 gibi görünüyor) "% r" veya "% p" işlemez. Ele alınması gereken başka bir yer varsa, onu bulamıyorum. – interjay