首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将COledatetime时间转换为unix时间/ php时间?

如何将COledatetime时间转换为unix时间/ php时间?
EN

Stack Overflow用户
提问于 2010-02-20 04:28:32
回答 3查看 2.5K关注 0票数 0

如何将COleDateTime::GetCurrentTime()转换为unix时间戳,或者更具体地说,我希望转换值,以便可以在PHP中通过date()函数使用它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-22 15:53:35

听起来像是DATE type

DATE类型是使用8字节浮点数实现的。天由整数递增表示,从1899年12月30日开始,午夜为时间零。小时值表示为数字的小数部分的绝对值。

测试代码:

代码语言:javascript
复制
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日期/时间值(尽管可能是错误的)。

编辑:转换函数的起始点(可能很简单)...

由创建一些示例数据

代码语言:javascript
复制
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);
  }
}

通向

代码语言:javascript
复制
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";
}

哪种打印

代码语言:javascript
复制
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代码是否还有其他约定必须遵循。如果您要使用此函数,请测试它,然后使用更多的示例再次测试它。

请记住,这仅限于unix时间戳范围,小于COleDateTime的范围。

票数 0
EN

Stack Overflow用户

发布于 2011-04-12 10:41:27

下面是一个简单的Python函数,用于将COleDateTime值转换为Python datetime对象。如果没有其他问题,您可以使用它将COleDateTime转换为POSIX时间格式,以供PHP摄取。假设您的dateval值(在原始情况下为40224.00000000)被传递给一个浮点值“COleDateTime”。

代码语言:javascript
复制
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)创建了一个基本日期时间,并为天数和部分天数添加了timedeltas。它不处理时区,但COleDateTime也不处理时区(据我所知)。如果没有其他内容,它也适用于您的测试用例,返回一个日期为2010-02-15、时间为0:00的Python datetime对象。

票数 1
EN

Stack Overflow用户

发布于 2010-02-20 05:51:35

COleDateTime::GetCurrentTime()返回一个对象,据我所知,它不会输出字符串。如果您能够提供在XML中获得的字符串的示例,那么为您提供答案将会容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2299335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档