时间戳转换为秒

时间:2017-05-24 12:45:21

标签: matlab timestamp type-conversion unix-timestamp

我有时间戳7.351173057570145e + 05,应代表'05 -Sep-2012 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时间(in-或不包括ms)?
  4. 感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

timestr的文档提到它期望sqlplus kjohnston create or replace procedure mydircreate (p_dir varchar2) as ex_custom EXCEPTION; PRAGMA EXCEPTION_INIT( ex_custom, -20001 ); begin if lower(p_dir) not like '/foo/bar/%' then raise_application_error( -20001, 'Not authorized' ); end if; execute immediate 'create or replace directory mydir as ''' || p_dir || ''''; end mydircreate; create user testuser identified by <password>; grant create session to testuser; grant execute on kjohnston.mydircreate to testuser; exit; sqlplus testuser SQL> exec kjohnston.mydircreate('mydir', '/randomdir'); ORA-20001: Not authorized SQL> exec kjohnston.mydircreate('mydir', '/foo/bar/baz'); PL/SQL procedure successfully completed. 返回的格式:

  

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

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

  

datenum函数创建一个表示每个数组的数字数组   时间点为从0000年1月0日起的天数

所以,如果您的偏移是7小时,差异应该是7/24,这确实是L. Scott Johnson建议的0.2917。

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

dateenum

答案 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(即秒数,包括自00:00:00 1月1日 - 1970年UTC(通用协调时间)以来经过的小数秒,忽略闰秒)函数posixtime

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

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

答案 2 :(得分:1)

快速回答您的问题:

  1. 就像@gnovice指出的格式&#39; datenum&#39;,这是 自00年1月1日起的天数
  2. 只需添加到您的号码x / 24

  3. 您可以将其转移到正常时间,然后再转回到unix时间。