私は文字列20150410 121416
をC++で持っています。C++の日付書式と同様に、文字列の間にコロンを挿入する方法は?
私は私が文字列にコロンを挿入するにはどうすればよい20150410 12:14:16
にこれを有効にする必要がありますか?
私は文字列20150410 121416
をC++で持っています。C++の日付書式と同様に、文字列の間にコロンを挿入する方法は?
私は私が文字列にコロンを挿入するにはどうすればよい20150410 12:14:16
にこれを有効にする必要がありますか?
CおよびC++での日付/時刻のフォーマットは、strftime
で行うことができます。また、標準ではないが一般的なPOSIX関数であるstrptime
が存在し、時間を解析するのに使うことができます。これらを使用して入力形式で日付/時刻を解析し、それを目的の形式でフォーマットすることができます。
つまり、自分で解析コードを書きたくないとします。
C++ 11をお使いの場合は、このfree, open-source date/time libraryを使用して、strftimeのような形式の文字列でこれを行うのに役立ちます。
#include "tz.h"
#include <iostream>
#include <sstream>
int
main()
{
using namespace date;
std::string input = "20150410 121416";
std::stringstream stream{input};
stream.exceptions(std::ios::failbit);
sys_seconds tp;
parse(stream, "%Y%m%d %H%M%S", tp);
auto output = format("%Y%m%d %T", tp);
std::cout << output << '\n';
}
出力::ただ、一般的な文字列としてこれらの治療とは対照的に、ライブラリーをフォーマット/解析する日付/時刻を使用しての
20150410 12:14:16
利点の一つは、あなたがより多くのことができるということですこのようなコードは次のようになりますフォーマット変換中に簡単にフォーマットを変更したり、datetimeを操作することができます(タイムゾーンを変更するなど)。
たとえば、次の月に仕様が変更される可能性があります。これはモスクワの現地時間を表すタイムスタンプであり、ロンドンの現地時間に変換してYYYY-MM-DD HH:MM:SS <UTC offset>
の形式で出力する必要があると伝えられます。 良い日時ライブラリを使用している場合は、上記のコードはほとんど変わりません。
#include "tz.h"
#include <iostream>
#include <sstream>
int
main()
{
using namespace date;
std::string input = "20150410 121416";
std::stringstream stream{input};
stream.exceptions(std::ios::failbit);
local_seconds tp;
parse(stream, "%Y%m%d %H%M%S", tp);
auto moscow_time = make_zoned("Europe/Moscow", tp);
auto london_time = make_zoned("Europe/London", moscow_time);
auto output = format("%F %T %z", london_time);
std::cout << output << '\n';
}
2015-04-10 10:14:16 +0100
しかし、あなただけの文字列操作をやって始めた場合、突然のすべてがあなたの目の前に大きな課題を持っています。 セマンティクスを理解するコードを書く日時 "20150410 121416"のは、文字列として "20150410 121416"の文字を操作する上で重要な飛躍です。
あなたは私にC++で同じものを書く方法を教えてもらえますか?お願いします。 – doe
@ doe:お手伝いします。コンパイラとそのコンパイラのバージョンは? gccやclangの場合、C++のどのバージョンですか?私。 '-std = C++ 11'か' -std = C++ 14'をコンパイルコマンドラインに置くことができますか? –
<script type="text/javascript">
function formatTime(objFormField){
intFieldLength = objFormField.value.length;
if(intFieldLength==2 || intFieldLength == 2){
objFormField.value = objFormField.value + ":";
return false;
}
}
</script>
Enter time <input type="text" maxlength="5" minlength="5" onKeyPress="formatTime(this)"/>
コードのみの回答は避けてください。 http://meta.stackoverflow.com/a/303605/4284627 –
'find'と' insert'を使用します。 –
一般的な文字列とは対照的に、専用タイプのdatetimeを扱うことには大きな利点があります。 –