誰も次のコードを書いた方がいいですか?ポータブルC++で時間文字列を解析する
boost::time
を使用しないでください。リンクの問題が発生するため、strptime()
はmsvcにあるため使用できません。
#include <ctime>
int strtomonth(string s)
{
const char *months[12] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
for (int i=0;i<12;i++)
if (strcmp(months[i],s.c_str())==0)
return i;
return -1;
}
time_t get_compilation_time()
{
stringstream s;
s << __TIMESTAMP__; // formatted like "Tue Dec 6 13:42:54 2011"
string weekday,month;
int day,h,m,sec,year;
char colon;
s >> weekday >> month >> day >> h >> colon >> m >> colon >> sec >> year;
tm compile_time;
compile_time.tm_sec = 0;
compile_time.tm_min = 0;
compile_time.tm_hour = 0;
compile_time.tm_mday = day;
compile_time.tm_mon = strtomonth(month);
compile_time.tm_year = year-1900;
compile_time.tm_isdst = 0;
compile_time.tm_wday = 0;
compile_time.tm_yday = 0;
time_t cmptime = mktime(&compile_time);
return cmptime;
}
(私は「buildtime.h」を作成し、私のランタイム計算を保存するためのpythonまたは類似でプレビルドステップを作ることができ、この場合には感謝しますが、このようになりまし動作し、オーバーヘッドはありません私はそれに固執する問題)。
しかし...私はそれが間違って取得する場合、未定義の動作、コードの純粋に機能的な部分がどうあるべきかで参照、不潔...自分月の文字列を解析し、破棄されます変数を宣言すると、Cスタイルの構造体の初期化!より良い方法がありますか?
申し訳ありませんが、最良ではない*良い方法をお探しですか(つまり、「ビルドタイム.hを作成してランタイム計算を保存するためのPythonなどのビルド前のステップを作成しますか? –
良い方法がありますか?はい。ブーストとの忍耐。 (不特定の)「リンクの問題」に対処してください。 – aSteve
ですから、tm_sec/tm_min/tm_hour = 0のままにしておけば、日付だけに興味がありますか? –