如何將COleDateTime :: GetCurrentTime()轉換爲unix時間戳或更具體地說,我想轉換該值,以便我可以在PHP中使用date()函數?如何將COledatetime轉換爲unix時間/ php時間?
回答
聽起來像DATE type:
日期類型是使用一個8字節的浮點數實現。天數由1899年12月30日開始的整數增量表示,午夜時間爲零。小時值表示爲數字小數部分的絕對值。
測試代碼:
COleDateTime cdt(2010, 2, 15, 0, 0, 0); // 2010-02-15 12:00 AM
DATE d = cdt; // using COleDateTime::operator DATE
printf("%f", d);
打印40224.000000
。
我不認爲有一個內置函數將其轉換回任何「本地」php日期/時間值(可能是錯誤的)。
編輯:A(可能是幼稚)起點轉換函數...
一些樣本數據由
LPCTSTR data[] = {
_T("1976-03-27 05:54:00"),
_T("1984-04-01 11:55:55"),
_T("1996-01-25 08:30:00"),
_T("2000-01-01 08:30:00"),
_T("2010-02-14 00:00:00"),
_T("2010-02-14 23:59:59"),
_T("2010-02-15 00:00:00"),
_T("2010-02-15 00:00:01"),
_T("2010-02-23 15:30:00"),
NULL
};
COleDateTime cdt;
for(int i=0; data[i]; i++) {
if (!cdt.ParseDateTime(data[i])) {
_tprintf(_T("%s: error\n"), data[i]);
}
else {
_tprintf(_T("'%s'=>'%f'\n"), data[i], (DATE)cdt);
}
}
導致
function DATE2unix($d) {
static $jd2DATE_offset = 2415019;
$date = intval($d);
$time = fmod($d, 1);
$ts = jdtounix($date+$jd2DATE_offset) + round($time*86400);
return $ts;
}
$data = array(
'1976-03-27 05:54:00'=>'27846.245833',
'1984-04-01 11:55:55'=>'30773.497164',
'1996-01-25 08:30:00'=>'35089.354167',
'2000-01-01 08:30:00'=>'36526.354167',
'2010-02-14 00:00:00'=>'40223.000000',
'2010-02-14 23:59:59'=>'40223.999988',
'2010-02-15 00:00:00'=>'40224.000000',
'2010-02-15 00:00:01'=>'40224.000012',
'2010-02-23 15:30:00'=>'40232.645833'
);
foreach($data as $target=>$d) {
$ts = DATE2unix($d);
$date = gmdate('Y-m-d H:i:s', $ts);
echo 'd=', $d, ' | target=', $target, ' | date=', $date, ' : ', ($target===$date) ? 'ok':'error', "\n";
}
它打印
d=27846.245833 | target=1976-03-27 05:54:00 | date=1976-03-27 05:54:00 : ok
d=30773.497164 | target=1984-04-01 11:55:55 | date=1984-04-01 11:55:55 : ok
d=35089.354167 | target=1996-01-25 08:30:00 | date=1996-01-25 08:30:00 : ok
d=36526.354167 | target=2000-01-01 08:30:00 | date=2000-01-01 08:30:00 : ok
d=40223.000000 | target=2010-02-14 00:00:00 | date=2010-02-14 00:00:00 : ok
d=40223.999988 | target=2010-02-14 23:59:59 | date=2010-02-14 23:59:59 : ok
d=40224.000000 | target=2010-02-15 00:00:00 | date=2010-02-15 00:00:00 : ok
d=40224.000012 | target=2010-02-15 00:00:01 | date=2010-02-15 00:00:01 : ok
d=40232.645833 | target=2010-02-23 15:30:00 | date=2010-02-23 15:30:00 : ok
創建
雖然這9個樣本似乎工作正常,但我不確定關於intval()/ round()以及是否有其他約定,php代碼必須遵循。如果你打算使用這個函數,測試它然後用更多的樣本再次測試它。
請記住,這僅限於小於COleDateTime範圍的unix時間戳範圍。
我會在PHP那會解決任何東西允許我使用它 - 一些能讓我獲得40224.000000並將其轉換爲日期字符串,unix時間戳等的東西,一旦我以其中一種格式將其轉換爲可以從那裏轉換的格式...? – 2010-02-23 11:30:26
更改cpp代碼可能是不可能的? – VolkerK 2010-02-23 15:16:49
COleDateTime::GetCurrentTime()
返回一個對象,它不輸出字符串,只要我可以在MSDN文檔中告訴。如果您可以提供您在XML中獲得的字符串示例,那麼爲您提供答案會更容易。
下面是一個簡單的Python函數,用於將COleDateTime值轉換爲Python日期時間對象。如果沒有別的,您可以使用它將COleDateTime轉換爲POSIX時間格式以供PHP接收。假設您的COleDateTime值(原始情況下爲40224.00000000)被傳遞到浮點值「dateval」。
def oledatetime_to_datetime(dateval):
from datetime import datetime, timedelta
import math
basedate = datetime(year=1899, month=12, day=30, hour=0, minute=0)
parts = math.modf(dateval)
days = timedelta(parts[1])
day_frac = timedelta(abs(parts[0]))
return basedate + days + day_frac
我只是創建MSDN文檔(1899-12-30 @ 0:00)在指定的開始日期和時間的基礎datetime和添加timedeltas了幾天,部分天數。它不涉及時區,但COleDateTime(據我所知)也沒有。如果沒有其他功能可用於您的測試用例,則返回日期2010-02-15和時間0:00的Python日期時間對象。
- 1. 如何將時間戳轉換爲php中的unix時間戳?
- 2. 將時間轉換爲Unix時間戳
- 3. 如何在UNIX中將UNIX時間戳轉換爲EST時間?
- 4. 如何將MFC的COleDateTime轉換爲C#日期時間?
- 5. 使用php將Unix時間轉換爲GMT日期時間
- 6. PHP將MySQL日期時間轉換爲Unix時間戳
- 7. 轉換時間UNIX時間
- 8. 將Unix時間戳轉換爲時區?
- 9. PHP unix時間轉換
- 10. 如何在ISO中將ISO8601時間戳轉換爲unix時間?
- 11. 如何將UTC時間轉換爲Unix時間戳在swift中?
- 12. MySQL:你如何將日期時間轉換爲unix時間?
- 13. 如何將unix時間戳轉換爲人類可讀時間?
- 14. 如何將UNIX時間戳轉換爲PHP中的PHP
- 15. PHP將時間轉換爲時間段
- 16. PHP日期轉換爲unix時間戳
- 17. 如何將PHP中的unix時間戳轉換爲ISO8601時間戳?
- 18. 如何將php m.d.Y日期轉換爲Unix時間戳?
- 19. 將unix時期時間戳轉換爲TSQL日期時間
- 20. 將日期和時間轉換爲UNIX時代時間戳
- 21. 將datetime轉換爲unix時間戳
- 22. 將unix時間戳轉換爲julian
- 23. 將Unix時間戳轉換爲MySQL DATETIME
- 24. 將UTC轉換爲Unix時間戳
- 25. 將YYYYMMDD轉換爲Unix中的時間
- 26. 將三列轉換爲unix時間R
- 27. 將dd MMM yyyy轉換爲unix時間
- 28. MySQL將datetime轉換爲Unix時間戳
- 29. 將db2 datestamp轉換爲Unix時間戳
- 30. 將Unix/Linux時間轉換爲Windows FILETIME
你的意思是windows/atl/mfc類嗎? http://msdn.microsoft.com/en-us/library/k2cfwb55%28VS.80%29.aspx如果是這樣,這是如何涉及到PHP? (有點奇怪,這個問題有一個PHP,但不是一個win32標籤,是不是?) – VolkerK 2010-02-19 20:36:45
我這麼認爲。我解析由cpp應用程序使用該GetCurrentTime()方法生成的xml數據,因此在PHP中,我需要將該值轉換爲我可以在PHP中使用的值。 – 2010-02-19 21:03:47
你能舉一個來自實際的XML文件的例子嗎? – VolkerK 2010-02-19 21:06:36