如何将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中将UNIX时间戳转换为EST时间?
- 3. 如何将MFC的COleDateTime转换为C#日期时间?
- 4. PHP将MySQL日期时间转换为Unix时间戳
- 5. 转换时间UNIX时间
- 6. MySQL:你如何将日期时间转换为unix时间?
- 7. 如何在ISO中将ISO8601时间戳转换为unix时间?
- 8. 如何将UTC时间转换为Unix时间戳在swift中?
- 9. PHP日期转换为unix时间戳
- 10. 将日期和时间转换为UNIX时代时间戳
- 11. 将unix时间戳转换为julian
- 12. 将epoch/unix转换为日期时间
- 13. 将datetime转换为unix时间戳
- 14. 将Unix/Linux时间转换为Windows FILETIME
- 15. 将当地时间转换为UNIX
- 16. 将UTC转换为Unix时间戳
- 17. 将dd MMM yyyy转换为unix时间
- 18. 将YYYYMMDD转换为Unix中的时间
- 19. PHP将Unix时间转换为ISO并减去一小时
- 20. 将QString Unix纪元时间转换为QString标准时间
- 21. Python:将unix时间转换为持续时间
- 22. 将Unix时间戳转换为带Joda时间的字符串
- 23. 将用户输入的时间转换为UNIX时间? [Android]
- 24. Python:将Varbinary类型的时间戳转换为unix时间戳
- 25. 将SAS日期时间转换为SAS中的UNIX时间戳
- 26. 将日期时间格式转换为Unix时间戳Pandas
- 27. 将日期时间转换为UNIX时间
- 28. 将熊猫日期时间索引转换为Unix时间?
- 29. 在Apex Salesforce中将Unix时间转换为日期时间
- 30. Unix时间戳的时间转换
你的意思是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