首页 文章

如何在datetime matlab中使用毫秒转换日期字符串

提问于
浏览 1336
1

嗨,我对日期字符串有一个小问题 . 我的数据在matlab表中,大约有200万行 . 时间格式为DateStrings ='2014-06-23T17:06:41.584 0200' . 我想在datenum中拥有它 . 所以我想我可以使用以下代码将其转换为datetime,然后将其转换为datenum .

t = datetime(DateStrings,'InputFormat','uuuu-MM-dd''T''HH:mm:SSSSSXXX','TimeZone','UTC');

但这不起作用 . 使用相同的错误消息“无法使用'uuuu-MM-dd'T'HH:mm:SSSSSXXX'格式解析日期/时间字符串 . 我尝试了几个字符串来删除毫秒然后编码工作 . 我不真的需要毫秒,所以我想分割字符串并删除毫秒 . 然而,数据量的问题,我遇到了内存问题 . 有没有人知道如何以聪明的方式做到这一点 . 亲切的问候马蒂亚斯

1 回答

  • 5

    datetime的部分格式不正确 .

    略微调整:

    DateStrings='2014-06-23T17:06:41.584+0200';  
    t = datetime(DateStrings,'InputFormat','uuuu-MM-dd''T''HH:mm:ss.SSSXXXX','TimeZone','UTC');
    

    哪个回报:

    t = 
    
       23-Jun-2014 15:06:41
    

    编辑:

    忘了问题的第二部分 . 要使用datenum,您将再次需要稍微更改语法 . 我还要注意,您可以对字符串执行此转换,而无需转换为 datetime 数组 .

    例如:

    DateStrings='2014-06-23T17:06:41.584+0200';
    t = datenum(DateStrings, 'yyyy-mm-ddTHH:MM:SS.FFF');
    test = datestr(t, 'yyyy-mm-dd HH:MM:SS.FFF');
    

    哪个回报:

    t =
    
       7.3577e+05
    

    test =
    
    2014-06-23 17:06:41.584
    

    关于 datenum 的最后一点是,不支持时区 . 由于 datenum 代表固定日期的天数,我们可以简单地添加/删除小时数:

    DateStrings='2014-06-23T17:06:41.584+0200';
    t = datenum(DateStrings, 'yyyy-mm-ddTHH:MM:SS.FFF');
    
    hourstoshift = -2;
    t = datenum(t + hourstoshift/24);
    test = datestr(t, 'yyyy-mm-dd HH:MM:SS.FFF')
    

    哪个回报:

    test =
    
    2014-06-23 15:06:41.584
    

    这里我已经指定了手动移动的小时数,但您也可以解析时间并自动确定 .

相关问题