【问题标题】:Matlab datenum generationMatlab datenum 生成
【发布时间】:2011-05-04 19:42:49
【问题描述】:

我正在使用 dtstr2dtnummx,因为它更快,但我遇到了一个问题,这个函数正在生成不同的 datenum,或者我的日期格式不正确

日期 = {'2011-03-13 23:59:59.100'}

out1 =datenum(日期)

out2=dtstr2dtnummx(日期,'yyyy-mm-dd HH:MM:SS.SSS')

输出如下:

日期 =

'2011-03-13 23:59:59.100'

out1 =

      734575.999989583

out2 =

      736281.960423495

不知道哪里出错了

更新

我找到了答案,使用以下日期格式我得到了相同的结果

dtstr2dtnummx(日期,'YYYY-MM-dd HH:mm:ss.SSS')

但我不知道为什么会这样,因为我跟着this 教程,但我得到了错误的输出,如果有人知道答案,请分享。

【问题讨论】:

    标签: matlab date


    【解决方案1】:

    datenumdtstr2dtnummx 使用不同的格式字符串:datenum 调用cnv2icudf 将“日期格式标记转换为ICU 日期格式标记”(参见help cnv2icudf),这些标记可与dtstr2dtnummx 一起使用。请注意,这包括为 MM 交换大写和小写(交换月份和分钟)。换句话说,您使用datenum 的文档为dtstr2dtnummx 创建了一个格式字符串,该字符串是未记录的且私有的。

    要获得正确使用的格式字符串,您可以调用

    cnv2icudf('yyyy-mm-dd HH:MM:SS.FFF')
    

    导致

    ans =

    yyyy-MM-dd HH:mm:ss.SSS

    这与您自己找到的解决方案非常接近。

    经验教训:dtstr2dtnummx 是私有函数是有原因的 - 在您了解包装器 datenum 之前不要调用它;-)。

    顺便说一句,出于好奇:您真的分析过您的代码并发现 datenum 是罪魁祸首吗?

    【讨论】:

    • 请注意,您的原始格式字符串 'yyyy-mm-dd HH:MM:SS.SSS' 是两种格式的混合 - datenum 的毫秒数是 'FFF' 而对于私有函数它们是“SSS”
    • 我应该提一下,为了能够调用这些私有函数,我将它们从 C:\Program Files\MATLAB\R2010b\toolbox\matlab\timefun\private\cnv2icudf.m 复制到我的工作目录...
    • 是的,我把 dtstr2dtnummx 复制到 :)
    • 我测试了运行时间和 1000 次对话,它需要 3.5 秒到 4 秒,而使用 dtstr2dtnummx 只需要 0.8 秒,所以这是非常大的优化:) 因为我有一个非常大的数据库(测量)一亿行,所以在这种情况下它计算时间
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多