是否有一種常見的,方便的跨平臺方法,用於將格式字符串「HH:MM:SS。<小數第二個>」轉換爲timedelta)數字類型,反之亦然在C或C++?C++將「HH:MM:SS.fraction」轉換爲int64_t
回答
strptime
就像它對於這個特定問題的可移植性一樣。它不在C標準庫中(即使自從C89,C99和C2011不再具有比POSIX更便攜的特性(即使這麼多,微軟)),但它足夠普及,我的建議是編寫代碼,就好像它是普遍的,然後在您的構建系統中檢測到它的缺失並注入替代品。你可以在這裏獲得一個BSD許可的替換:http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/time/strptime.c?rev=HEAD(可能需要可移植性修改)
請注意,既沒有['strftime()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html)格式化也沒有根據POSIX,解析時間的['strptime()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html)支持小數秒。 Linux文檔(例如http://linux.die.net/man/3/strptime)似乎也有此限制。原因是:'struct tm'不會做分數;有很多亞秒格式('struct timespec','struct timeval',...),你需要分子的分子和分母都可用。 –
這不是很難(我假設你的時間是機器生成的,而不是手寫的,所以我們可以依賴它被「正確「 - 否則,我們不得不添加一個」這是範圍內的值「檢查)。我也會假設分數始終是相同的數字位數。
int64_t parsetime(char *str)
{
int hh, mm, ss, fract;
int64_t t;
if (sscanf(str, "%d:%d:%d.%d", &hh, &mm, &ss, &fract) != 4)
{
printf("Badly formed time %s\n", str);
return -1;
}
// 1000000 assumes there are 6 digits in fract, and we want microseconds.
t = ((hh * 60) + mm *60) + s) * 1000000 + fract;
return t;
}
你可以做同樣的事情,使用double
和%d:%d:%lf
格式字符串,然後乘上衛浴套間倍增,讓您的分數爲整數形式(例如1000毫秒,1000000微,億爲納秒,等等)
謝謝。我寫了自己的例程,因爲實際上我的格式是'[[HH:] MM:] SS [。
- 1. 將time_t轉換爲int64_t
- 2. 將int64_t轉換爲time_duration
- 3. ios:如何將NSString轉換爲int64_t?
- 4. 如何將int轉換爲int64_t
- 5. int64_t指針轉換爲AVX2內部_m256i
- 6. 轉換(u)int64_t到NSNumbers
- 7. 使用std :: stringstream將boost :: int64_t大數轉換爲字符串。
- 8. 如何讓g ++在將int64_t轉換爲int時發出警告?
- 9. 在C++中將64位double轉換爲int64_t類似於Convert :: ToInt64方法
- 10. Objective-C:將浮點數轉換爲int64_t,不會造成精確損失
- 11. 將C++類型int16_t轉換爲int64_t,但不修改基礎二進制文件
- 12. 將c#RSACryptoServiceProvider轉換爲C++
- 13. 將QT/C++轉換爲C#
- 14. 將C++轉換爲objective-c
- 15. 將C++/CLI轉換爲C#
- 16. 將VB轉換爲C#類型轉換
- 17. 將XAML轉換爲c#
- 18. 將XAML ObjectDataProvider轉換爲C#
- 19. 將C#Lambda轉換爲VB.NET
- 20. 將DateTime.Today轉換爲int c#
- 21. C# - 將uint轉換爲byte []
- 22. 將double []轉換爲System.array c#
- 23. 將JavaScript轉換爲C#
- 24. 將GLSL轉換爲C#
- 25. 將ARM轉換爲C
- 26. C#將Microsoft.Sharepoint.Client.FieldUserValue轉換爲Microsoft.Sharepoint.Cliend.User
- 27. 將PHP CURL轉換爲C#
- 28. 將C#行轉換爲VB.net
- 29. 將wchar_t轉換爲char C++
- 30. 將objective-c轉換爲ruby
看看這裏,請:http://stackoverflow.com/questions/3414509/date-time-parsing-in-c –
我被告知理解strptime只是POSIX。其他方面呢?至於提升,我將不得不做一些閱讀... – JellicleCat