C 프로그램에서 날짜 및 시간 값을 얻는 방법은 무엇입니까?
다음과 같은 것이 있습니다.
char *current_day, *current_time;
system("date +%F");
system("date +%T");
그것은 표준 출력에 현재 날짜와 시간을 인쇄,하지만 난이 출력을 얻을 나에게 할당 할 current_day
과 current_time
제가 나중에 그 값을 몇 가지 처리를 할 수 있도록하는 것이 변수.
current_day ==> current day
current_time ==> current time
내가 지금 생각할 수있는 유일한 해결책은 일부 파일에 출력을하고 파일을 읽은 다음에 날짜와 시간의 값을 할당하는 것입니다 current_day
및 current_time
. 그러나 이것은 좋은 방법이 아니라고 생각합니다. 짧고 우아한 다른 방법이 있습니까?
시간을 얻으려면 time()
및 사용 localtime()
:
#include <time.h>
#include <stdio.h>
void main()
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1,tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
}
time_t rawtime;
time ( &rawtime );
struct tm *timeinfo = localtime ( &rawtime );
strftime
시간을 문자열로 형식화하는 데 사용할 수도 있습니다 .
strftime
(C89)
Martin이 언급했습니다 . 여기에 예가 있습니다.
main.c
#include <assert.h>
#include <stdio.h>
#include <time.h>
int main(void) {
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char s[64];
assert(strftime(s, sizeof(s), "%c", tm));
printf("%s\n", s);
return 0;
}
컴파일 및 실행 :
gcc -std=c89 -Wall -Wextra -pedantic -o main.out main.c
./main.out
샘플 출력 :
Thu Apr 14 22:39:03 2016
%c
지정은 같은 형식을 생성합니다 ctime
.
이 함수의 한 가지 장점은 작성된 바이트 수를 반환하여 생성 된 문자열이 너무 긴 경우 더 나은 오류 제어를 허용한다는 것입니다.
반환 가치
Provided that the result string, including the terminating null byte, does not exceed max bytes, strftime() returns the number of bytes (excluding the terminating null byte) placed in the array s. If the length of the result string (including the terminating null byte) would exceed max bytes, then strftime() returns 0, and the contents of the array are undefined. Note that the return value 0 does not necessarily indicate an error. For example, in many locales %p yields an empty string. An empty format string will likewise yield an empty string.
asctime
및 ctime
(C89)
asctime
형식을 지정하는 편리한 방법입니다 struct tm
.
main.c
#include <stdio.h>
#include <time.h>
int main(void) {
time_t t = time(NULL);
struct tm *tm = localtime(&t);
printf("%s", asctime(tm));
return 0;
}
샘플 출력 :
Wed Jun 10 16:10:32 2015
그리고 ctime()
표준에서 다음과 같은 지름길이라고 말하는 것도 있습니다.
asctime(localtime())
Jonathan Leffler가 언급 했듯이이 형식에는 시간대 정보가 없다는 단점이 있습니다.
POSIX 7 은 이러한 기능을 "노후화"로 표시하여 향후 버전에서 제거 될 수 있습니다.
표준 개발자는 asctime ()이 버퍼 오버플로의 가능성으로 인해 ISO C 표준에 포함되어 있어도 asctime () 및 asctime_r () 함수를 폐기하기로 결정했습니다. ISO C 표준은 또한 이러한 문제를 피하는 데 사용할 수있는 strftime () 함수를 제공합니다.
이 질문의 C ++ 버전 : C ++에서 현재 시간과 날짜를 얻는 방법?
Ubuntu 16.04에서 테스트되었습니다.
위에 제공된 답변은 좋은 CRT 답변이지만 원하는 경우 Win32 솔루션을 사용할 수도 있습니다. 거의 동일하지만 Windows 용으로 프로그래밍하는 경우 IMO는 API를 사용하는 것이 좋습니다 (실제로 Windows에서 프로그래밍하는 경우는 모르지만 무엇이든간에)
char* arrDayNames[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; // Jeez I hope this works, I haven't done this in ages and it's hard without a compiler..
SYSTEMTIME st;
GetLocalTime(&st); // Alternatively use GetSystemTime for the UTC version of the time
printf("The current date and time are: %d/%d/%d %d:%d:%d:%d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
printf("The day is: %s", arrDayNames[st.wDayOfWeek]);
어쨌든 이것은 Windows 솔루션입니다. 언젠가 도움이 되길 바랍니다!
Timespec에는 날짜가 내장되어 있습니다.
http://pubs.opengroup.org/onlinepubs/7908799/xsh/time.h.html
#include <time.h>
int get_day_of_year(){
time_t t = time(NULL);
struct tm tm = *localtime(&t);
return tm.tm_yday;
}`
WinAPI 를 사용하여 날짜와 시간을 가져올 수 있습니다. 이 방법은 Windows에만 해당되지만 Windows만을 대상으로하거나 이미 WinAPI를 사용하고 있다면 확실히 가능성이 있습니다 1 :
을 사용하여 시간과 날짜를 모두 얻을 수 있습니다 . 또한 struct 를 채우기 위해 두 함수 ( 또는 ) 중 하나를 호출해야합니다 .SYSTEMTIME
struct
GetLocalTime()
GetSystemTime()
GetLocalTime()
귀하의 시간대에 맞는 시간과 날짜 를 알려줍니다 .
GetSystemTime()
UTC로 시간과 날짜 를 알려줍니다 .
은 다음과 같은 멤버를 가지고 :SYSTEMTIME
struct
wYear
, wMonth
, wDayOfWeek
, wDay
, wHour
, wMinute
, wSecond
및wMilliseconds
그런 다음 일반적인 방식으로 구조체 에 액세스하면 됩니다.
실제 예제 코드 :
#include <windows.h> // use to define SYSTEMTIME , GetLocalTime() and GetSystemTime()
#include <stdio.h> // For printf() (could otherwise use WinAPI equivalent)
int main(void) { // Or any other WinAPI entry point (e.g. WinMain/wmain)
SYSTEMTIME t; // Declare SYSTEMTIME struct
GetLocalTime(&t); // Fill out the struct so that it can be used
// Use GetSystemTime(&t) to get UTC time
printf("Year: %d, Month: %d, Day: %d, Hour: %d, Minute:%d, Second: %d, Millisecond: %d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds); // Return year, month, day, hour, minute, second and millisecond in that order
return 0;
}
(단순성과 명확성을 위해 코딩되었으며 더 나은 형식의 방법은 원래 답변을 참조하십시오 )
출력은 다음과 같습니다.
Year: 2018, Month: 11, Day: 24, Hour: 12, Minute:28, Second: 1, Millisecond: 572
유용한 참고 자료 :
모든 WinAPI 문서 (대부분 이미 위에 나열 됨) :
Zetcode의이 주제에 대한 매우 좋은 초보자 튜토리얼 :
Codeproject에서 datetime을 사용한 간단한 작업 :
1 : Ori Osherov의 답변 ( " Given that OP started with date +%F, they're almost certainly not using Windows. – melpomene Sep 9 at 22:17
") 의 주석에서 언급했듯이 OP는 Windows를 사용 하지 않습니다 . 그러나이 질문에는 플랫폼 별 태그가 없기 때문에 (해당 특정 시스템에 대한 답변이 있어야한다고 언급하지 않습니다.) 인터넷 검색 "get time in c"두 답변이 여기에 속할 때 가장 많이 발생하는 결과 중 하나입니다.이 질문에 대한 답변을 검색하는 일부 사용자는 Windows에있을 수 있으므로 유용 할 것입니다.
파일 대신 파이프를 사용하고 C ++가 아닌 C를 사용하는 경우 다음과 같이 popen을 사용할 수 있습니다.
#include<stdlib.h>
#include<stdio.h>
FILE *fp= popen("date +F","r");
fgets와 함께 * fp를 일반 파일 포인터로 사용하십시오.
C ++ 문자열을 사용하고 자식을 포크하고 명령을 호출 한 다음 부모에게 파이프하십시오.
#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;
string currentday;
int dependPipe[2];
pipe(dependPipe);// make the pipe
if(fork()){//parent
dup2(dependPipe[0],0);//convert parent's std input to pipe's output
close(dependPipe[1]);
getline(cin,currentday);
} else {//child
dup2(dependPipe[1],1);//convert child's std output to pipe's input
close(dependPipe[0]);
system("date +%F");
}
// 날짜 + T에 대해 비슷한 1을 만드십시오. 그러나 제 시간에 물건을 고수하는 것이 좋습니다 .h GL
I'm getting the following error when compiling Adam Rosenfield's code on Windows. It turns out few things are missing from the code.
Error (Before)
C:\C\Codes>gcc time.c -o time
time.c:3:12: error: initializer element is not constant
time_t t = time(NULL);
^
time.c:4:16: error: initializer element is not constant
struct tm tm = *localtime(&t);
^
time.c:6:8: error: expected declaration specifiers or '...' before string constant
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:36: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:55: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:70: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:82: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:94: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
time.c:6:105: error: expected declaration specifiers or '...' before 'tm'
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
^
C:\C\Codes>
Solution
C:\C\Codes>more time.c
#include <stdio.h>
#include <time.h>
int main()
{
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
}
C:\C\Codes>
Compiling
C:\C\Codes>gcc time.c -o time
C:\C\Codes>
Final Output
C:\C\Codes>time
now: 2018-3-11 15:46:36
C:\C\Codes>
I hope this will helps others too
#include<stdio.h>
using namespace std;
int main()
{
printf("%s",__DATE__);
printf("%s",__TIME__);
return 0;
}
ReferenceURL : https://stackoverflow.com/questions/1442116/how-to-get-the-date-and-time-values-in-a-c-program
'programing' 카테고리의 다른 글
C ++ 배열에 요소를 추가하는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
“===”은 무엇을 의미합니까? (0) | 2021.01.05 |
Objective C에서 사용자 정의 형식의 문자열로 현재 시간 가져 오기 (0) | 2021.01.05 |
앱 스크립트를 사용하여 Google 스프레드 시트의 셀 내부에 UI를 어떻게 추가합니까? (0) | 2021.01.05 |
nib / storyboard의 UITextView에서 새 줄을 만드는 방법은 무엇입니까? (0) | 2021.01.05 |