-5

I have string 20150410 121416 in c++.

I need to turn this into 20150410 12:14:16

How can i insert a colon to the string?

Cache Staheli
  • 3,510
  • 7
  • 32
  • 51
doe
  • 17
  • 3

2 Answers2

1

One can format date/times in C and C++ with strftime. There also exists a non-standard but common POSIX function called strptime one can use to parse times. One could use these to parse your date/time in your input format, and then format it back out in your desired format.

That is, assuming you didn't want to write the parsing code yourself.

If you have C++11, then you could use this free, open-source date/time library to help you do all this with strftime-like format strings. Such code could look like:

#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';
}

Output:

20150410 12:14:16

One advantage of using a date/time parsing/formatting library, as opposed to just treating these as generic strings, is that you can more easily alter the formatting, or manipulate the datetime during the format conversion (e.g. have it change timezones).

For example, next month the specification might change on you and now you're told that this is a timestamp representing local time in Moscow and you need to convert it to local time in London and output it in the form YYYY-MM-DD HH:MM:SS <UTC offset>. The above code hardly changes at all if you're using a good date/time library.

#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

But if you started out just doing string manipulation, all of the sudden you've got a major task in front of you. Writing code that understands the semantics of the datetime "20150410 121416" is a significant leap above manipulating the characters of "20150410 121416" as a string.

Howard Hinnant
  • 206,506
  • 52
  • 449
  • 577
  • @doe: Happy to help. For what compiler and version of that compiler? And if gcc or clang, what version of C++? I.e. can you put `-std=c++11` or `-std=c++14` on the compile command line? – Howard Hinnant Apr 18 '16 at 02:10
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)"/>