Howard Hinnant's free, open source, header-only, date/time libraryも、障害のあるget_time
とstrptime
施設のコンテキストで、std::chrono::time_point
にこれらのフォーマットを解析することができます。しかし、それはstd::istringstream
の使用を必要とします。ここでは、次のようになります。これは、このように行使することができ
#include "date.h"
#include <sstream>
std::chrono::system_clock::time_point
parse_RFC_1123(const std::string& s)
{
std::istringstream in{s};
std::chrono::system_clock::time_point tp;
in >> date::parse("%a, %d %b %Y %T %Z", tp);
return tp;
}
std::chrono::system_clock::time_point
parse_RFC_850(const std::string& s)
{
std::istringstream in{s};
std::chrono::system_clock::time_point tp;
in >> date::parse("%a, %d-%b-%y %T %Z", tp);
return tp;
}
std::chrono::system_clock::time_point
parse_asctime(const std::string& s)
{
std::istringstream in{s};
std::chrono::system_clock::time_point tp;
in >> date::parse("%a %b %d %T %Y", tp);
return tp;
}
:
#include <iostream>
int
main()
{
auto tp = parse_RFC_1123("Sun, 06 Nov 1994 08:49:37 GMT");
using namespace date;
std::cout << tp << '\n';
tp = parse_RFC_850("Sunday, 06-Nov-94 08:49:37 GMT");
std::cout << tp << '\n';
tp = parse_asctime("Sun Nov 6 08:49:37 1994");
std::cout << tp << '\n';
}
出力:
1994-11-06 08:49:37.000000
1994-11-06 08:49:37.000000
1994-11-06 08:49:37.000000
解析フラグ%a
と%b
は、通常はロケールに依存しています。ただし、-DONLY_C_LOCALE=1
でこのライブラリをコンパイルすると、ロケールに依存しないになります。 はと同じ結果を返すはずです。しかし、実用的な観点から、を-DONLY_C_LOCALE=1
なしでコンパイルしても上記の結果が得られない場合は、std :: libベンダーにバグレポートを提出する必要があります。あなたは-DONLY_C_LOCALE=1
とをコンパイルし、あなたは、上記の結果を得る私のケージをガタガタ、および時間ではない場合、私はそれは、日中に固定されていますしていない場合は
。
ありがとうございました! –
お返事ありがとうございます!私はあなたの機能についていくつかのベンチマークを行いました。私はあなたのソリューションがなぜRFC850の場合の 'sprintf'より速いのか理解できません。あなたはストリームを使用しています。ベンチマークは[こちら](https://github.com/oktal/pistache/pull/102#issuecomment-322527542)にあります。 –
おかげで、ありがとう。 –