簡體   English   中英

Char 到 time_t 的轉換總是返回 Wed Dec 31 23:59:59 1969

[英]Char to time_t conversion always returns Wed Dec 31 23:59:59 1969

我正在 Arduino 中為我的 ESP8266 編寫一些代碼。 我想通過 UDP 向另一個 ESP 發送時間戳。

setup(){我初始化時間使用

configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); 

並在loop(){

time_t timestamp = time(nullptr);

得到時間。 然后我將它發送到另一個 ESP

Udp.write(ctime(&timestamp));

我需要再次制作 time_t 以將其與實際時間進行比較。

但出於測試目的,我使用echo -n "Fri Feb 28 14:44:11 2020" >/dev/udp/192.168.43.248/4210從我的 MacBook Pro (MacOS Mojave) 通過 UDP 中的終端發送時間作為字符。

串行監視器顯示輸入和輸出如下:

UDP packet contents: Fri Feb 28 14:44:11 2020
Wed Dec 31 23:59:59 1969

我的代碼是:

time_t convertStringToTime_t(char timestamp []) {
  time_t result = time(NULL);
  const char *timestampString = timestamp;
  int weekDay, month, dd, hh, mm, ss, yyyy = 0;
  struct tm timestampFromString = {0};

  //input     Fri Feb 28 16:40:11 2020
  //output    Wed Dec 31 23:59:59 1969 TODO always same output?!

  sscanf(timestampString, "%s %s %d %d:%d:%d %d", &weekDay, &month, &dd, &hh, &mm, &ss, &yyyy);

  timestampFromString.tm_year = yyyy - 1900; //years since 1900
  timestampFromString.tm_mon = month - 1;
  timestampFromString.tm_wday = weekDay;
  timestampFromString.tm_mday = dd;
  timestampFromString.tm_hour = hh;
  timestampFromString.tm_min = mm;
  timestampFromString.tm_sec = ss;
  timestampFromString.tm_isdst = -1;

  result = mktime(&timestampFromString);
  // mktime   Convert tm structure to time_t
  return result;
}

我看到了這個線程,但它根本沒有幫助我:/我也嘗試過使用sscanf但沒有區別。 我想我在scanf做錯了什么?

解決了:感謝@thomachan,我意識到我試圖將月 + 日字符放入 int 中(我可以通過將字符轉換為 int 來解決這個問題)。

但是我聽了@Maxim Egorushkin 並使用了使用 time_t 值的更簡單的方法:

char *buffer;
time_t i = strtoul(incomingPacket, &buffer, 10);

如果您有選擇,我建議您改為傳遞ISO-8601 時間戳 那看起來像

2020-03-03T10:28:59

並使用sscanf (它為您提供組件)或strptime (填充struct tm )進行簡單解析。 如果您的平台不提供strptime實現,您可以使用 BSD 中的一個。

如果您不需要人類可讀的時間,您可以發送time_t的值 - 自 Unix 紀元以來的秒數。

date +%s > /dev/udp/192.168.43.248/4210

接收者可以使用std::strtoul將其從字符串解析為time_t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM