时间戳转换为秒

Time stamp conversion to seconds

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

如果我在 Matlab 中使用 timestr(),我会得到“2012 年 9 月 5 日 07:20:17”。显然我的时间是 7 小时(所有文件都是如此)。 我试图将 7*3600 秒添加到时间戳,因为我认为它是从 1970 年开始的秒数,但这是错误的。 如果我减去时间,我得到的差值为 0.2915。这意味着 7 小时表示为 0.2915。我不明白这是怎么回事。

  1. 那是什么时间格式?
  2. 有没有办法把时间加x小时?
  3. 有没有办法将其转换为 unix 时间(毫秒内或不包括毫秒)?

感谢您的帮助。

timestr 的文档提到它需要 dateenum 返回的格式:

TS = TIMESTR(D) converts D, a serial date number (as returned by DATENUM) into string TS with the format HH:MM:SS.SSSS.

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

The datenum function creates a numeric array that represents each point in time as the number of days from January 0, 0000.

因此,如果您的偏移量为 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

您可以先转换 date number (which represents time as the number of days from January 0, 0000) to a 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 (i.e. the number of seconds, including fractional seconds, elapsed since 00:00:00 1-Jan-1970 UTC (Universal Coordinated Time), ignoring leap seconds) using the function posixtime:

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

注意: 您的时间戳与您预期的相差 7 小时的事实可能是时区问题,如 . You may be able to account for this by passing some extra arguments to datetime when you convert the date number. Specifically, you should check out the 'TimeZone' 参数中所述。

快速回答您的问题:

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

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