我有时间戳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。我不明白这是如何运作的。
感谢您的帮助。
答案 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)
快速回答您的问题:
只需添加到您的号码x / 24
您可以将其转移到正常时间,然后再转回到unix时间。