关于 C 中的时间戳
Regarding timestamp in C
我正在尝试获取 YYYY-MM-DDTHH:MM:SS.SSS+HH:MM
格式的时间戳,例如2021-10-28T07:31:56.345+05:30
。我能达到的最接近的是 2021-11-03T13:06:43+0530
。请注意秒字段后缺少的 SSS
和 0530
中缺少的 :
。这就是我所做的:
#include <stdio.h>
#include <time.h>
void current_time(char* str)
{
time_t timer;
struct tm* tm_info;
time(&timer);
tm_info = localtime(&timer);
strftime(str, 50, "%FT%T%z", tm_info);
}
int main(void)
{
char str[50];
current_time(str);
printf("%s\n", str);
}
如有任何帮助,我们将不胜感激。谢谢。
也许您可以使用 timespec_get
获取包括纳秒在内的时间。
#include <stdio.h>
#include <time.h>
void current_time(char* str, size_t len) {
if(len < 30) { // the final string is 29 chars + '[=10=]'
str[0] = '[=10=]';
return;
}
struct timespec ts;
// get timestamp inc. nanoseconds
timespec_get(&ts, TIME_UTC);
// get the second part of the timespec:
struct tm lt = *localtime(&ts.tv_sec);
// format the beginning of the string
size_t w = strftime(str, len, "%FT%T.", <);
// add milliseconds
w += sprintf(str + w, "%03d", (int)(ts.tv_nsec / 1000000));
// get zone offset from UTC
char zone[6];
strftime(zone, sizeof zone, "%z", <);
if(zone[0]) { // check that we got the offset from UTC
// add the zone to the resulting string
w += sprintf(str + w, "%.3s:", zone);
w += sprintf(str + w, "%.2s", zone + 3);
}
}
int main(void) {
char buff[100];
current_time(buff, sizeof buff);
printf("Timestamp: %s\n", buff);
}
可能的输出:
Timestamp: 2021-11-03T10:05:06.696+01:00
符合您想要的格式:
YYYY-MM-DDTHH:MM:SS.SSS+HH:MM
我正在尝试获取 YYYY-MM-DDTHH:MM:SS.SSS+HH:MM
格式的时间戳,例如2021-10-28T07:31:56.345+05:30
。我能达到的最接近的是 2021-11-03T13:06:43+0530
。请注意秒字段后缺少的 SSS
和 0530
中缺少的 :
。这就是我所做的:
#include <stdio.h>
#include <time.h>
void current_time(char* str)
{
time_t timer;
struct tm* tm_info;
time(&timer);
tm_info = localtime(&timer);
strftime(str, 50, "%FT%T%z", tm_info);
}
int main(void)
{
char str[50];
current_time(str);
printf("%s\n", str);
}
如有任何帮助,我们将不胜感激。谢谢。
也许您可以使用 timespec_get
获取包括纳秒在内的时间。
#include <stdio.h>
#include <time.h>
void current_time(char* str, size_t len) {
if(len < 30) { // the final string is 29 chars + '[=10=]'
str[0] = '[=10=]';
return;
}
struct timespec ts;
// get timestamp inc. nanoseconds
timespec_get(&ts, TIME_UTC);
// get the second part of the timespec:
struct tm lt = *localtime(&ts.tv_sec);
// format the beginning of the string
size_t w = strftime(str, len, "%FT%T.", <);
// add milliseconds
w += sprintf(str + w, "%03d", (int)(ts.tv_nsec / 1000000));
// get zone offset from UTC
char zone[6];
strftime(zone, sizeof zone, "%z", <);
if(zone[0]) { // check that we got the offset from UTC
// add the zone to the resulting string
w += sprintf(str + w, "%.3s:", zone);
w += sprintf(str + w, "%.2s", zone + 3);
}
}
int main(void) {
char buff[100];
current_time(buff, sizeof buff);
printf("Timestamp: %s\n", buff);
}
可能的输出:
Timestamp: 2021-11-03T10:05:06.696+01:00
符合您想要的格式:
YYYY-MM-DDTHH:MM:SS.SSS+HH:MM