36.1时间工具

Octave用于操作时间值的核心函数集以标准C库中的相应函数为模式。其中一些函数使用了一种时间数据结构,其中包括以下元素:

usec

秒后的微秒(0-999999)。

广告
sec

分钟后的秒数(0-60)。这个数字可以是60来说明闰秒。

广告
min

小时后几分钟(0-59)。

广告
hour

自午夜(0-23)起的小时数。

广告
mday

一个月的哪一天(1-31)。

广告
mon

自1月以来的几个月(0-11)。

广告
year

自1900年以来的岁月。

广告
wday

自周日(0-6)以来的天数。

广告
yday

自1月1日起的天数(0-365)。

广告
isdst

夏令时标志。

广告
gmtoff

从UTC偏移的秒数。

广告
zone

时区。

广告

在以下函数的描述中,此结构体被称为tm_struct.

 
:seconds= time ()

返回当前时间作为自epoch以来的秒数。

历元参考1970年1月1日00:00:00 UTC(协调世界时)。例如,1997年2月17日星期一07:15:06 UTC,返回的值为time为856163706。

详见: strftime,strptime,localtime,gmtime,mktime,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告
 
:t = now ()

将当前的本地日期/时间作为序列号返回(详见datenum).

整体部分,floor (now)对应于今天和1月1日之间的天数。

分数部分,rem (now, 1)对应于当前时间。

详见: clock,date,datenum.

广告
 
:str= ctime (t)

转换从返回的值time(或任何其他非负整数),返回到本地时间,并返回与相同形式的字符串asctime.

函数ctime (time)相当于asctime (localtime (time))例如

ctime (time ())
   ⇒ "Mon Feb 17 01:15:06 1997\n"

详见: asctime,time,localtime.

广告
 
:tm_struct= gmtime (t)

给定从返回的值time,或任何非负整数,返回与UTC(协调世界时)对应的时间结构体。

例如

gmtime (time ())
     ⇒ {
           usec = 0
           sec = 6
           min = 15
           hour = 7
           mday = 17
           mon = 1
           year = 97
           wday = 1
           yday = 47
           isdst = 0
           gmtoff = 0
           zone = GMT
        }

详见: strftime,strptime,localtime,mktime,time,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告
 
:tm_struct= localtime (t)

给定从返回的值time,或任何非负整数,返回与本地时区对应的时间结构体。

localtime (time ())
     ⇒ {
           usec = 0
           sec = 6
           min = 15
           hour = 1
           mday = 17
           mon = 1
           year = 97
           wday = 1
           yday = 47
           isdst = 0
           gmtoff = -21600
           zone = CST
        }

详见: strftime,strptime,gmtime,mktime,time,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告
 
:seconds= mktime (tm_struct)

将与本地时间对应的时间结构体转换为自epoch以来的秒数。

例如

mktime (localtime (time ()))
     ⇒ 856163706

详见: strftime,strptime,localtime,gmtime,time,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告
 
:str= asctime (tm_struct)

使用以下格式将时间结构体转换为字符串:"ddd mmm mm HH:MM:SS yyyy\n".

例如

asctime (localtime (time ()))
     ⇒ "Mon Feb 17 01:15:06 1997\n"

这相当于ctime (time ()).

详见: ctime,localtime,time.

广告
 
:str= strftime (fmt,tm_struct)

格式化时间结构体tm_struct以灵活的方式使用formatstringfmt包含'%'替换类似于printf.

除非另有说明,否则被替换的字段具有固定的大小;如有必要,会填充数字字段。默认情况下,填充为零;对于显示单个数字的字段,可以通过以下方式更改或禁止填充%'使用下面描述的一个修饰符。未知字段值被复制为普通字符。所有其他字符都会被复制到输出中,而不会发生更改。例如

strftime ("%r (%Z) %A %e %B %Y", localtime (time ()))
      ⇒ "01:15:06 AM (CST) Monday 17 February 1997"

Octave的strftime函数支持ANSI C字段值的超集。

文字字符字段:

%%

符号

广告
%n

换行符。

广告
%t

制表符。

广告

数字修饰符(非标准扩展):

- (dash)

请勿填充字段。

广告
_ (underscore)

用空格填充字段。

广告

时间字段:

%H

小时(00-23)。

广告
%I

小时(01-12)。

广告
%k

小时(0-23)。

广告
%l

小时(1-12)。

广告
%M

分钟(00-59)。

广告
%p

当地时间上午或下午。

广告
%r

时间,12小时(hh:mm:ss[AP]M)。

广告
%R

时间,24小时(hh:mm)。

广告
%s

自1970年1月1日00:00:00以来的时间(以秒为单位)(非标准扩展)。

广告
%S

第二(00-61)。

广告
%T

时间,24小时(hh:mm:ss)。

广告
%X

区域设置的时间表示形式(%H:%M:%s)。

广告
%z

与UTC的偏移量(±hhmm),如果无法确定时区,则为零。

广告
%Z

时区(EDT),如果没有可确定的时区,则不确定。

广告

日期字段:

%a

区域设置的缩写工作日名称(Sun-Sat)。

广告
%A

区域设置的完整工作日名称,可变长度(周日-周六)。

广告
%b

Locale的缩写月份名称(Jan-Dec)。

广告
%B

区域设置的完整月份名称,可变长度(1月-12月)。

广告
%c

当地的日期和时间(美国东部时间1989年11月4日星期六12:02:33)。

广告
%C

世纪(00-99)。

广告
%d

年月日(01-31)。

广告
%e

月份的哪一天(1-31)。

广告
%D

日期(mm/dd/yy)。

广告
%h

与%b相同。

广告
%j

一年中的某一天(001-366)。

广告
%m

月份(01-12)。

广告
%U

一年中的周数,周日为一周的第一天(00-53)。

广告
%w

星期几(0-6)。

广告
%W

一年中的周数,星期一为一周的第一天(00-53)。

广告
%x

区域设置的日期表示(mm/dd/yy)。

广告
%y

年份的最后两位数字(00-99)。

广告
%Y

年份(1970年-)。

广告

详见: strptime,localtime,gmtime,mktime,time,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告
 
:[tm_struct,nchars] = strptime (str,fmt)

转换字符串str到时间结构体tm_struct在格式字符串的控制下fmt.

如果fmt未能匹配,nchars为0;否则,它被设置为最后匹配的字符加1的位置。请始终检查这一点,除非您确信日期字符串将被正确解析。

详见: strftime,localtime,gmtime,mktime,time,now,date,clock,datenum,datestr,datevec,calendar,weekday.

广告

本节中描述的大多数剩余函数都不是以标准C库为模式的。有些可与兼容MATLAB并且提供其他的是因为它们是有用的。

 
:datevec= clock ()
:[datevec,isdst] = clock ()

将当前本地日期和时间作为日期向量返回。

日期向量包含以下字段:当前年份、月份(1-12)、日期(1-31)、小时(0-23)、分钟(0-59)和秒(0-61)。秒字段在小数点后有一个小数部分,以提高精度。

可选的第二个输出isdst如果夏令时(DST)对系统的时区有效,则为true。

例如

fix (clock ())
  ⇒   1993      8     20      4     56      1

clock在具有gettimeofday作用

详见: now,date,datevec.

广告
 
:str= date ()

以字符串形式返回当前日期,格式为DD-MMM-YYYY。

例如

date ()
  ⇒ 20-Aug-1993

详见: now,clock,datestr,localtime.

广告
 
:secs= etime (t2,t1)

返回从返回的两个时间值之间的差值(以秒为单位)clock(t2-t1).

例如

t0 = clock ();
# many computations later...
elapsed_time = etime (clock (), t0);

将设置变量elapsed_time到变量之后的秒数t0已设置。

详见: tic,toc,clock,cputime,addtodate.

广告
 
:[total,user,system] = cputime ();

返回Octave会话使用的CPU时间。

第一个输出是执行进程所花费的总时间,等于第二个和第三个输出的总和,这两个输出分别是在用户模式下执行的CPU秒数和在系统模式下执行所花费的CPU秒数来表示。

如果您的系统无法返回CPU时间使用情况,cputime为其每个输出值返回0。

请注意,从于Octave启动时使用了一些CPU时间,因此检查是否合理cputime通过检查所用的CPU总时间是否为非零来工作。

详见: tic,toc.

广告
 
:tf= is_leap_year ()
:tf= is_leap_year (year)

如果返回trueyear是闰年,否则是假的。

如果没有指定年份,is_leap_year使用当前年份。

例如

is_leap_year (2000)
   ⇒ 1

详见: weekday,eomday,calendar.

广告
 
:tic ()
:id= tic ()

初始化挂钟计时器。

调用tic如果没有输出参数,则重置内部计时器。对的后续调用toc返回自设置计时器以来的秒数。

如果用一个输出参数调用,tic创建一个新的定时器实例并返回一个定时器标识符id这个id是类型的标量uint64可以传递给toc以检查此计时器上的运行时间,而不是默认的内部计时器。

示例1:具有内部计时器的基准测试代码

tic;
# many computations later...
elapsed_time = toc;

示例2:混合计时器id和内部计时器

tic;
pause (1);
toc
⇒ Elapsed time is 1.0089 seconds.
id = tic;
pause (2);
toc (id)
⇒ Elapsed time is 2.01142 seconds.
toc
Elapsed time is 3.02308 seconds.

调用tictoc以这种方式允许嵌套的定时调用。

如果您对进程使用的CPU时间更感兴趣,则应使用cputime函数。这个tictoc函数返回调用之间经过的实际挂钟时间。这可能包括处理其他工作或什么都不做的时间。

详见: toc,cputime.

广告
 
:toc ()
:toc (id)
:elapsed_time= toc (…)

用挂钟计时器测量经过的时间。

在不带参数的情况下,返回上次调用的内部时间所用的秒数tic.

当给定标识符时id对于特定计时器,返回自计时器以来经过的秒数id已初始化。

详见tic,例如使用tic/toc.

详见: tic,cputime.

广告
 
:pause ()
:pause (n)
:old_state= pause ("on")
:old_state= pause ("off")
:old_state= pause ("query")

暂停程序的执行或更改暂停函数的状态。

如果在没有输入参数的情况下调用,则程序将挂起,直到输入一个构造函数。If自变量n是一个正的实数,表示程序应暂停的秒数,例如:

tic; pause (0.05); toc
     -| Elapsed time is 0.05039 seconds.

以下示例打印一条消息,然后等待5秒钟,然后清除屏幕。

disp ("wait please...");
pause (5);
clc;

如果使用字符串参数调用"on","off""query",暂停函数的状态被更改或查询。状态为"off",暂停函数立即返回。可选返回值包含暂停函数的先前状态。在以下示例中,暂停在本地被禁用:

old_state = pause ("off");
tic; pause (0.05); toc
     -| Elapsed time is 3.00407e-05 seconds.
pause (old_state);

当程序暂停时,Octave仍然处理图形绘制和图形回调执行。

详见: kbhit.

广告
 
:days= datenum (datevec)
:days= datenum (year,month,day)
:days= datenum (year,month,day,hour)
:days= datenum (year,month,day,hour,minute)
:days= datenum (year,month,day,hour,minute,second)
:days= datenum ("datestr")
:days= datenum (“datestr”,f)
:days= datenum (“datestr”,p)
:[days,secs] = datenum (…)

将输入的日期/时间返回为连续的日期编号,将1月1日定义为第1天。

整数部分,floor (days)统计日期输入中的完整天数。

分数部分,rem (days, 1)对应于给定日期的时间。

输入可以是日期向量(详见datevec),日期字符串(详见datestr),或直接指定为输入。

当处理输入的日期串时,f是用于解释日期字符串的格式字符串(详见datestr). 如果没有格式f则通过各种格式执行相对较慢的搜索。最好指定formatstringf如果已知的话。不指定特定成分的格式的值将设置为零。未指定日期的格式将默认为当前年份的1月1日。

单独通过时year,month,day等参数,每个参数都可以是标量或非标量数组。非标量输入必须全部具有相同的大小。标量输入将被扩展为非标量输入的大小。

p是本世纪初两位数年份的参考年份。如果未指定,则默认为当前年份减去50。

可选输出secs以比更高的精度保存指定日期的时间days.

注意:

示例:

Convert from datestrs:
d = datenum ("1966-06-14")
⇒ d = 718232

d = datenum ({"1966-06-14", "1966-06-15", "1966-06-16"})
⇒ d =
      718232
      718233
      718234

Convert from datevec:
d = datenum ([1966 06 14])
⇒ d = 718232

d = datenum ([1966 06 14 23 59 59])
⇒ d = 718232.9999884259

Specify date components separately:
d = datenum (1966, 6, 14)
⇒ d = 718232

d = datenum (1966, magic(3), 1)
⇒ d =

      718280   718068   718219
      718127   718188   718249
      718158   718311   718099

小心datenums将地球的特定时间表示为awhole。它们不考虑时区(基于时间和地点的变化),也不考虑夏令时引起的季节变化(基于当地法规的时间变化)。请注意,当函数解释时区和DST偏移时,可以创建日期编号,例如datestr,不存在或不明确。

小心此函数不会尝试处理儒略历1582年10月15日之前的日期错误多达11天。此外,请注意,只有罗马天主教国家在1582年采用了历法。直到1924年,它才被各地采用。有关详细信息,详见格里高利日历上的维基百科条目。

警告闰秒被忽略。维基百科上有一个闰秒表。

详见: datestr,datevec,now,clock,date.

广告

算法:Peter Baum(http://vsg.cape.com/~pbaum/date/date0.htm)

 
:str= datestr (date)
:str= datestr (date,f)
:str= datestr (date,f,p)

根据格式设置给定日期/时间的格式f并在中返回结果str.

date是一个序列号(详见datenum),adate向量(详见datevec),或字符串或字符串的元胞数组。在后一种情况下,它被传递给datevec猜测输入日期格式。

f可以是对应于下表中某个代码的整数,也可以是日期格式字符串。

p是本世纪初的年份,在其中可以解释两位数的年份。如果未指定,则默认为当前年份减去50。

例如,日期730736.65149(2000-09-07 15:38:09.0934)的格式如下:

密码 format 实例
0 dd-mmm-yyyy HH:MM:SS 07-Sep-2000 15:38:09
1 dd-mmm-yyyy 07-Sep-2000
2 mm/dd/yy 09/07/00
3 mmm Sep
4 m S
5 mm 09
6 mm/dd 09/07
7 dd 07
8 ddd Thu
9 d T
10 yyyy 2000
11 yy 00
12 mmmyy Sep00
13 HH:MM:SS 15:38:09
14 HH:MM:SS PM 3:38:09 PM
15 HH:MM 15:38
16 HH:MM PM 3:38 PM
17 QQ-YY Q3-00
18 QQ Q3
19 dd/mm 07/09
20 dd/mm/yy 07/09/00
21 mmm.dd,yyyy HH:MM:SS Sep.07,2000 15:38:08
22 mmm.dd,yyyy Sep.07,2000
23 mm/dd/yyyy 09/07/2000
24 dd/mm/yyyy 07/09/2000
25 yy/mm/dd 00/09/07
26 yyyy/mm/dd 2000/09/07
27 QQ-YYYY Q3-2000
28 mmmyyyy Sep2000
29 yyyy-mm-dd 2000-09-07
30 yyyymmddTHHMMSS 20000907T153808
31 yyyy-mm-dd HH:MM:SS 2000-09-07 15:38:08

如果f是一个格式字符串,可以识别以下符号:

象征 意思 实例
yyyy Full year 2005
yy Two-digit year 05
mmmm Full month name December
mmm Abbreviated month name Dec
mm Numeric month number (padded with zeros) 01, 08, 12
m First letter of month name (capitalized) D
dddd Full weekday name Sunday
ddd Abbreviated weekday name Sun
dd Numeric day of month (padded with zeros) 11
d First letter of weekday name (capitalized) S
HH Hour of day, padded with zeros, 09:00
or padded with spaces if PM is set 9:00 AM
MM Minute of hour (padded with zeros) 10:05
SS Second of minute (padded with zeros) 10:05:03
FFF Milliseconds of second (padded with zeros) 10:05:03.012
AM Use 12-hour time format 11:30 AM
PM Use 12-hour time format 11:30 PM

如果f未指定或-1,则使用0、1或16,具体取决于的日期部分还是时间部分date是空的。

如果p未指定,则默认为当前年份减去50。

如果给定了日期的矩阵或元胞数组,则返回日期字符串的列向量。

详见: datenum,datevec,date,now,clock.

广告
 
:v= datevec (date)
:v= datevec (date,f)
:v= datevec (date,p)
:v= datevec (date,f,p)
:[y,m,d,h,mi,s] = datevec (…)

转换序列号(详见datenum)或日期字符串(详见datestr)转换为日期向量。

日期向量是一个有六个成员的行向量,分别表示年、月、日、小时、分钟和秒。

日期数字输入可以是标量数组,也可以是非标量数组。日期字符串可以是单个日期字符串,也可以是每行都是日期字符串的二维日期字符数组,或者是任何维度的元胞字符串数组,每个数组元素都包含单个日期字符串。

v是一个二维的日期向量数组,每行一个日期向量。对于数组输入,排序v基于中日期的列主要顺序data.

f是用于解释日期字符串的格式字符串(详见datestr). 如果date是一个字符串或字符串的元胞数组,但未指定格式,使用启发式方法猜测输入格式。这些试探法可能会导致与用户预期的结果不同的匹配。此外,这涉及到通过各种格式进行相对较低的搜索。最好指定格式字符串f如果已知的话。未指定特定时间分量的格式的值将设置为零。不指定特定日期组件的格式将默认该组件为当前年份的1月1日。为了计算日期向量,即使后面的字符包含额外的时间/日期信息,也会忽略这些字符。

p是本世纪初两位数年份的参考年份。如果未指定,则默认为当前年份减去50。

详见: datenum,datestr,clock,now,date.

广告
 
:d= addtodate (d,q,f)

添加q时间量(单位f)到串行日期num,d.

f必须是其中之一"year","month","day","hour","minute","second""millisecond".

详见: datenum,datevec,etime.

广告
 
:c= calendar ()
:c= calendar (d)
:c= calendar (y,m)
:calendar (…)

以6x7矩阵形式返回当前月历。

如果d如果指定了,则返回包含日期的月份的日历d,必须是序列日期号或日期字符串。

如果ym如果指定了,则返回年份的日历y和月份m.

如果未指定输出参数,请在屏幕上打印日历,而不是返回矩阵。

详见: datenum,datestr.

广告
 
:[n,s] = weekday (d)
:[n,s] = weekday (d,format)

在中以数字形式返回星期几n作为一个字符串s.

一周中的日子编号为1-7,第一天是星期日。

d是一个序列日期号或日期字符串。

如果字符串format不存在或等于"short"然后s将包含工作日的缩写名称。如果format"long"然后s将包含全名。

基于的返回值表format:

n "short" "long"
1 Sun Sunday
2 Mon Monday
3 Tue Tuesday
4 Wed Wednesday
5 Thu Thursday
6 Fri Friday
7 Sat Saturday

详见: eomday,is_leap_year,calendar,datenum,datevec.

广告
 
:e= eomday (y,m)

返回当月的最后一天m年度y.

详见: weekday,datenum,datevec,is_leap_year,calendar.

广告
 
:datetick ()
:datetick (axis_str)
:datetick (date_format)
:datetick (axis_str,date_format)
:datetick (…, "keeplimits")
:datetick (…, "keepticks")
:datetick (hax, …)

将日期格式的刻度标签添加到轴。

应用刻度的轴从确定axis_str与价值观相悖"x","y""z"。默认值为"x".

标签的格式从变量决定date_format,可以是字符串或正整数datestr接受。

如果第一个参数hax是一个轴句柄,然后绘制到此轴,而不是返回的当前轴gca.

详见: datenum,datestr.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2