는 당신을 위해 충분히 빠른 경우 알아,하지만하지 마십시오 : 나를 위해
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
std::cout << std::chrono::system_clock::now() << '\n';
}
그냥 출력 :
2017-03-02 17:04:26.813110
이 내가 작성한 라이브러리입니다. 무료 오픈 소스이며 "date.h"
부분은 헤더 전용입니다. full documentation 및 심지어 비디오 자습서가 모두 GitHub page과 연결되어 있습니다.
꽤 광범위한 서식 지정 및 구문 분석 옵션뿐만 아니라 시간 및 달력 계산을 안전하고 쉽게 수행 할 수있는 많은 다른 기능이 있습니다.
또한이 형식이 충분히 빠르지 않으면 라이브러리가 유연하게 계층화되어 하위 수준에서 상호 작용하고 자신의 I/O를 쉽게 작성할 수 있습니다. 예를 들어 여기에 당신이 마이크로 정밀도에 system_clock::time_point
에서 int
으로 필드 유형의 모든를 얻을 수있는 방법입니다 :
#include "date.h"
int
main()
{
using namespace date;
using namespace std::chrono;
auto t = system_clock::now();
// Convert system_clock::time_point to days-precision time_point
auto sd = floor<days>(t);
// Create time_of_day
auto tod = make_time(t - sd);
// Create year_month_day
year_month_day ymd = sd;
// Extract field types as int
int y = int{ymd.year()}; // Note 1
int m = unsigned{ymd.month()};
int d = unsigned{ymd.day()};
int h = tod.hours().count();
int M = tod.minutes().count();
int s = tod.seconds().count();
int us = duration_cast<microseconds>(tod.subseconds()).count();
}
지금 당신이 원하는 그러나 이러한 int
의 형식을 지정할 수 있습니다.
참고 1 : gcc-6.1 이전에는 {}
에 관한 컴파일러 버그가 있습니다. 대신 ()
을 사용하여 컴파일러 버그를 해결하십시오. 반대 방향 (int
s의 system_clock::time_point
에)가는
도 쉽게 : 당신이 원하는 그러나
#include "date.h"
int
main()
{
using namespace date;
using namespace std::chrono;
int y = 2017;
int m = 3;
int d = 2;
int h = 15;
int M = 33;
int s = 55;
int us = 123456;
// Convert field values to system_clock::time_point
system_clock::time_point t = sys_days(year{y}/m/d) + hours{h} + minutes{M} +
seconds{s} + microseconds{us};
}
이 int
의 구문 분석 한 다음 하나의 문에서 system_clock::time_point
을 형성 할 수있다.
라이브러리에는 여러 플랫폼에서 유지 관리하는 데 도움이되는 활성 사용자 커뮤니티가 있습니다.
이것은 기본적으로 "나를 찾아 도서관"질문입니다. 그러나...C++ 20 표준화가 제안 된 바가 있습니다. 'chrono' 표준 라이브러리 구성 요소 뒤에 있던 Howard Hinnant가 만들었습니다. 그는 (우리를 위해 그것을 구현할) 충분히 좋았습니다 (https://github.com/HowardHinnant/date);). –
@ NicolBolas, 대답으로 바꾸지 않으시겠습니까? –
@D_N : 이것은 닫아야 할 질문입니다. –