时间戳转换为秒
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。我不明白这是怎么回事。
- 那是什么时间格式?
- 有没有办法把时间加x小时?
- 有没有办法将其转换为 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'
参数中所述。
快速回答您的问题:
- 就像@gnovice 指出的格式'datenum',就是
自 0-Jan-0000
以来的天数
只需添加到您的号码x/24
你可以把它调到正常时间,然后再调回unix时间。
我有时间戳 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。我不明白这是怎么回事。
- 那是什么时间格式?
- 有没有办法把时间加x小时?
- 有没有办法将其转换为 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 小时的事实可能是时区问题,如 datetime
when you convert the date number. Specifically, you should check out the 'TimeZone'
参数中所述。
快速回答您的问题:
- 就像@gnovice 指出的格式'datenum',就是 自 0-Jan-0000 以来的天数
只需添加到您的号码x/24
你可以把它调到正常时间,然后再调回unix时间。