【问题标题】:Time stamp conversion to seconds时间戳转换为秒
【发布时间】:2017-10-24 19:45:29
【问题描述】:

我有时间戳 7.351173057570145e+05,它应该代表“2012 年 9 月 5 日 14:20:17”。不幸的是,我不知道那是哪种时间格式。

如果我在 Matlab 中使用 timestr(),我会得到 '05-Sep-2012 07:20:17'。显然我的时间是 7 小时(对于所有文件都是一致的)。 我试图将 7*3600 秒添加到时间戳,因为我认为它是 1970 年的秒数,但这是错误的。 如果我减去时间,我会得到 0.2915 的差异。这意味着 7 小时表示为 0.2915。我不明白这是怎么回事。

  1. 那是什么时间格式?
  2. 有没有办法在时间上增加 x 小时?
  3. 有没有一种方法可以将其转换为 unix 时间(毫秒内或毫秒内)?

感谢您的帮助。

【问题讨论】:

  • 7/24 = 0.291667
  • 这是有道理的。你知道那个时间戳的名字吗?

标签: matlab timestamp type-conversion unix-timestamp


【解决方案1】:

timestr 的文档提到它期望 dateenum 返回的格式:

TS = TIMESTR(D) 转换 D,一个日期序列号(返回 DATENUM) 转换为格式为 HH:MM:SS.SSSS 的字符串 TS。

dateenum 返回自 0000 年 1 月 0 日以来的天数:

datenum 函数创建一个数值数组,表示每个 从 0000 年 1 月 0 日开始的天数

因此,如果您的偏移量为 7 小时,则差异应为 7/24,这确实是 L. Scott Johnson 建议的 0.2917。

从 2014b 开始,您可以使用 datetime 来操作日期时间:

v = 7.351173057570145e+05;

d = datetime(v, 'ConvertFrom', 'datenum');
d.Hour = d.Hour + 7; % correct for the offset
d_posix = posixtime(d); % converts to posix

【讨论】:

  • 您也可以使用datenum(0,0,0,7,0,0) 来生成偏移量,这可能更好地描述了您的意图。 7小时可能是一个时区吗?也许UTC与当地时间?如果您使用的是最新的 MATLAB,新的 datetime 工具可以更完整地处理日期和时间,包括时区。
  • 感谢您的帮助。那成功了。我已经想知道时区了。有趣的是,数据记录在荷兰,为+1。录音软件可能来自美国中西部。
  • 完成了,我只是先检查并比较了答案。
【解决方案2】:

您可以先将您的 date number(表示从 0000 年 1 月 0 日开始的天数)转换为 datetime 对象,以使其更易于使用:

>> num = 7.351173057570145e+05;
>> dt = datetime(num, 'ConvertFrom', 'datenum')
dt = 
  datetime
   05-Sep-2012 07:20:17

然后您可以使用hours 函数轻松修改它以添加 7 小时,如下所示:

>> dt = dt+hours(7)
dt = 
  datetime
   05-Sep-2012 14:20:17

然后您可以使用函数 @ 将其转换为 UNIX time(即从 1970 年 1 月 1 日 00:00:00 UTC(通用协调时间)开始经过的秒数,包括小数秒,忽略闰秒) 987654325@:

>> format long
>> pt = posixtime(dt)
pt =
     1.346854817406057e+09

注意:正如a comment by Peter 中所述,您的时间戳与您预期的时间相差 7 小时这一事实可能是一个时区问题。在转换日期数字时,您可以通过将一些额外的参数传递给 datetime 来解决此问题。具体来说,您应该查看'TimeZone' 参数。

【讨论】:

  • 亲爱的新手,感谢您的回答。这有很大帮助。尽管如此,+小时显然将变量更改为posixtime不接受的“持续时间”。无论如何,它给了我正确的想法。如上所述,我也认为这是一个时区问题。
  • @FloridaMan:你确定吗?它仍然应该是日期时间,而不是持续时间。你运行的是什么版本?
  • ... 就是这样。我重新检查了,你是对的。我不知道我第一次做了什么。很抱歉。
【解决方案3】:

快速回答您的问题:

  1. 就像@gnovice 指出格式“datenum”一样,即 自 0-Jan-0000 以来的天数
  2. 只需添加到您的号码 x/24

  3. 你可以把它调成正常时间,然后再调回unix时间。

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2016-03-04
    • 2013-03-09
    • 2019-03-23
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多