2016-04-15 10 views
-5

私は文字列20150410 121416をC++で持っています。C++の日付書式と同様に、文字列の間にコロンを挿入する方法は?

私は私が文字列にコロンを挿入するにはどうすればよい20150410 12:14:16

にこれを有効にする必要がありますか?

+2

'find'と' insert'を使用します。 –

+0

一般的な文字列とは対照的に、専用タイプのdatetimeを扱うことには大きな利点があります。 –

答えて

1

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"の文字を操作する上で重要な飛躍です。

+0

あなたは私にC++で同じものを書く方法を教えてもらえますか?お願いします。 – doe

+0

@ doe:お手伝いします。コンパイラとそのコンパイラのバージョンは? gccやclangの場合、C++のどのバージョンですか?私。 '-std = C++ 11'か' -std = C++ 14'をコンパイルコマンドラインに置くことができますか? –

0
<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)"/> 
+0

コードのみの回答は避けてください。 http://meta.stackoverflow.com/a/303605/4284627 –

関連する問題