senaryosu: libexif ile "YYYY-AA-DD HH: MM: SS" formatında datetime olsun. Tasarruf maliyetini en aza indirgemek için, datetime unix zaman damgasına veya sadece 64bit veya 32bit'e mal olana benzetmek istiyorum. C ile herhangi bir açık yolu var mı?datetime unix timestamp c dönüşümü nasıl yapılır?
17
A
cevap
30
5
struct tm
numaralı belgeyi doldurmak için, tarih/saatin her bir parçasını tamsayıya dönüştürün venumaralı telefonu kullanarak time_t
numaralı telefona dönüştürün.
1
deneyebilirsiniz. İyi şanslar!
char * runner = NULL;
char *string_orig = "YYYY-MM-DD HH:MM:SS";
time_t time = 0;
struct tm tmp;
use strstr(string_orig, "-") and atoi foreach
tmp->tm_year ..
tmp->tm_mon ..
tmp->tm_mday ..
tmp->tm_hour ..
tmp->tm_min ..
tmp->tm_sec ..
with *runner as help
time = mktime(&tm)
1
Peki ya sscanf? strptime bulunmadığı durumlarda
struct tm tmVar;
char *strVar = "YYYY-MM-DD HH:MM:SS";
time_t timeVar;
if(sscanf(strVar, "%d-%d-%d %d:%d:%d", &tm.tm_year, /* the other fields */)==6)
timeVar = mktime(&tmVar);
else
// bad format
0
İşte hazır pasajı var:
#include <stddef.h>
#include <time.h>
#include <stdio.h>
time_t string_to_seconds(const char *timestamp_str)
{
struct tm tm;
time_t seconds;
int r;
if (timestamp_str == NULL) {
printf("null argument\n");
return (time_t)-1;
}
r = sscanf(timestamp_str, "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
if (r != 6) {
printf("expected %d numbers scanned in %s\n", r, timestamp_str);
return (time_t)-1;
}
tm.tm_year -= 1900;
tm.tm_mon -= 1;
tm.tm_isdst = 0;
seconds = mktime(&tm);
if (seconds == (time_t)-1) {
printf("reading time from %s failed\n", timestamp_str);
}
return seconds;
}
neye ihtiyacınız için Kendinize sscanf bir dize ayarlayın. Saat dilimini görmezden gelip GMT/UTC bir timezone
(veya _timezone
) seconds
den (time.h. DST tanımlanan küresel timezone
zaten tm
ait tm_isdst
alanını sıfırlamak suretiyle yok sayılır substract her zaman olduğu gibi dönüştürün.
orada biliyordu olmak zorunda strptime gibi bir şey ama bunu bulamadım.O zamanın% 99'unu kullanıyorum ve bunu desteklemiyorlar. –
+1: Strptime'ı düşünüyordum ama bunun için işlev adını hatırlayamadım. – Powerlord
Bir yan not olarak, Windows kullanıyorsanız, şu soruya bakın: http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows – Powerlord