36.1 Timing Utilities

Last-modified: 2025-03-09 (日) 11:16:59

36.1 タイミングユーティリティ

時間値を操作するための Octave のコア関数セットは、標準 C ライブラリの対応する関数をモデルにしています。これらの関数のいくつかは、次の要素を含む時間のデータ構造を使用します。

usec
秒後のマイクロ秒 (0 ~ 999999)。

sec
分後の秒数 (0 ~ 60)。うるう秒を考慮して、この数値は 60 になる場合があります。

min
毎時0分以降の分数(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 ()
現在の時刻をエポックからの秒数として返します。

エポックは、1970 年 1 月 1 日の 00:00:00 UTC (協定世界時) を参照します。たとえば、1997 年 2 月 17 日月曜日の 07:15:06 UTC に返された値はtime856163706 でした。

: t = now ()
現在のローカル日付/時刻をシリアル日番号として返します (を参照datenum)。

整数部分は、floor (now)今日から 0000 年 1 月 1 日までの日数に対応します。

小数部分はrem (now, 1)現在の時刻に対応します。

See also: clock, date, datenum.

: str = ctime (t)
(またはその他の負でない整数)から返された値をtimeローカル時刻に変換し、 と同じ形式の文字列を返します asctime。

この関数ctime (time)は と同等です asctime (localtime (time))。例:

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

See also: 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
      }

See also: 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
      }

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

: seconds = mktime (tm_struct)
ローカル時間に対応する時間構造をエポックからの秒数に変換します。

例えば:

mktime (localtime (time ()))
   ⇒ 856163706

See also: 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 ())。

See also: ctime, localtime, time.

: str = strftime (fmt, tm_struct)
'を含むフォーマット文字列fmtを使用して、時間構造体tm_structを柔軟にフォーマットします。%' の置換は の置換と同様です 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
ロケールの AM または PM。

%r
時刻、12 時間制 (hh:mm:ss [AP]M)。

%R
時刻、24 時間 (hh:mm)。

%s
1970 年 1 月 1 日 00:00:00 からの経過秒数 (非標準拡張)。

%S
2位(00-61)。

%T
時刻、24 時間 (hh:mm:ss)。

%X
ロケールの時間表現 (%H:%M:%S)。

%z
UTC からのオフセット (±hhmm)。タイムゾーンが判別できない場合は何も表示されません。

%Z
タイム ゾーン (EDT)、またはタイム ゾーンが判別できない場合は何も表示されません。

日付フィールド:

%a
ロケールの曜日の省略名 (Sun-Sat)。

%A
ロケールの完全な曜日名、可変長 (日曜日~土曜日)。

%b
ロケールの月名の省略形 (Jan ~ Dec)。

%B
ロケールの完全な月名、可変長 (1 月 - 12 月)。

%c
ロケールの日付と時刻 (1989 年 11 月 4 日土曜日 12:02:33 EST)。

%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
年の下2桁(00~99)。

%Y
年(1970年~)。

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

: [tm_struct, nchars] = strptime (str, fmt)
書式文字列fmtの制御下で、文字列strを時間構造体tm_structに変換します。

fmt が一致しない場合、 ncharsは 0 になります。それ以外の場合は、最後に一致した文字の位置に 1 を加えた値に設定されます。日付文字列が正しく解析されることが確実でない限り、常にこれを確認してください。

See also: 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) のフィールドが含まれます。秒フィールドには、精度を高めるために小数点以下の小数部分があります。

オプションの 2 番目の出力isdst は、システムのタイム ゾーンで夏時間 (DST) が有効な場合に true になります。

例えば:

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

clock機能を備えたシステムではより正確になりますgettimeofday 。

See also: now, date, datevec.

: str = date ()
現在の日付を DD-MMM-YYYY 形式の文字列として返します。

例えば:

date ()
⇒ 20-Aug-1993

See also: now, clock, datestr, localtime.

: secs = etime (t2, t1)
clock( t2 - t1 ) から返される 2 つの時間値の差を秒単位で返します 。

例えば:

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

elapsed_time変数が設定されてからの秒数を変数に設定しますt0。

See also: tic, toc, clock, cputime, addtodate.

: [total, user, system] = cputime ();
Octave セッションで使用された CPU 時間を返します。

最初の出力は、プロセスの実行に費やされた合計時間であり、2 番目と 3 番目の出力の合計に等しくなります。2 番目と 3 番目の出力は、それぞれユーザー モードでの実行に費やされた CPU 秒数とシステム モードでの実行に費やされた CPU 秒数です。

システムに CPU 時間の使用状況を報告する方法がない場合は、cputime 各出力値に対して 0 を返します。

Octave は起動時に CPU 時間を使用するため、cputime使用された合計 CPU 時間がゼロでないかどうかをチェックして、動作するかどうかを確認するのが妥当であることに注意してください。

See also: tic, toc.

: tf = is_leap_year ()
: tf = is_leap_year (year)
年が閏年の 場合は true を返し、それ以外の場合は false を返します。

年が指定されていない場合は、is_leap_year現在の年が使用されます。

例えば:

is_leap_year (2000)
 ⇒ 1

See also: weekday, eomday, calendar.

: tic ()
: id = tic ()
ウォールクロックタイマーを初期化します。

出力引数なしで呼び出すとtic、内部タイマーがリセットされます。後続の呼び出しでは、tocタイマーが設定されてからの秒数が返されます。

1 つの出力引数で呼び出された場合、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.

このように を呼び出すticと、ネストされたタイミング呼び出しが可能になります。toc

プロセスが使用した CPU 時間に興味がある場合は、cputime代わりに 関数を使用する必要があります。 関数ticとtoc 関数は、呼び出し間で経過した実際のウォールクロック時間を報告します。これには、他のジョブの処理に費やされた時間や、何も実行されなかった時間が含まれる場合があります。

See also: toc, cputime.

: toc ()
: toc (id)
: elapsed_time = toc (…)
壁掛けタイマーで経過時間を測定します。

引数がない場合、 の最後の呼び出し以降に内部タイマーで経過した秒数を返しますtic。

特定のタイマーの識別子idが指定された場合、タイマーidが初期化されてから経過した秒数を返します。

/ticの使用例については、を参照してください。 tictoc

参照: tic、cputime。

:一時停止 ()
:一時停止 (n)
:old_state = 一時停止 ("on")
:old_state = 一時停止 ("off")
:old_state = 一時停止 ("query")
プログラムの実行を一時停止したり、一時停止機能の状態を変更したりします。

入力引数なしで呼び出された場合、文字が入力されるまでプログラムは中断されます。引数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.

一時停止(古い状態);
プログラムが中断されている間も、Octave は図形の描画とグラフィックス コールバックの実行を処理します。

See also: 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 (…)
日付/時刻入力をシリアル日番号として返します。0000 年 1 月 1 日が 1 日目として定義されます。

整数部分は、日付入力内の完全な日数をカウントします。 floor (days)

小数部分は、特定の日の時間に対応します。 rem (days, 1)

入力は、日付ベクトル (を参照datevec)、日付文字列 (を参照datestr)、または直接入力として指定することができます。

入力日付文字列を処理する場合、f は日付文字列を解釈するために使用される書式文字列です (を参照datestr)。書式fが指定されていない場合は、さまざまな書式で比較的低速の検索が実行されます。書式文字列fがわかっている場合は、必ず指定することをお勧めします。特定の時間コンポーネントを指定しない書式では、値は 0 に設定されます。日付を指定しない書式では、デフォルトで現在の年の 1 月 1 日になります。

year、month、dayなどの引数を別々に渡す場合、それぞれはスカラー配列または非スカラー配列になります。非スカラー入力はすべて同じサイズである必要があります。スカラー入力は、非スカラー入力のサイズに拡張されます。

p は、2 桁の年が参照される世紀の開始年です。指定されていない場合は、現在の年から 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

注意: datenum は地球全体の特定の時間を表します。タイムゾーン (場所に基づく時間のシフト) や夏時間による季節の変化 (地域の規制に基づく時間のシフト) は考慮されません。タイムゾーンや DST シフトを考慮する関数 ( など) によって解釈されると、datestr存在しないかあいまいな datenum が作成される可能性があることに注意してください。

注意:この関数はユリウス暦を処理しないので、1582 年 10 月 15 日より前の日付は最大 11 日間違っています。また、1582 年にこの暦を採用したのはローマ カトリックの国だけであることにも注意してください。すべての国で採用されるようになったのは 1924 年になってからでした。詳細については、Wikipedia のグレゴリオ暦の項目を参照してください。

警告:うるう秒は無視されます。うるう秒の表は、Wikipedia のうるう秒の項目で参照できます。

See also: datestr, datevec, now, clock, date.

Algorithm: 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)、日付ベクトル ( を参照datevec)、または文字列または文字列のセル配列です。後者の場合、datevec入力日付形式を推測するために に渡されます。

f は、以下の表のいずれかのコードに対応する整数、または日付形式の文字列になります。

pは、2 桁の年を解釈する世紀の開始年です。指定しない場合は、現在の年から 50 を引いた値がデフォルトになります。

たとえば、日付 730736.65149 (2000-09-07 15:38:09.0934) は次のようにフォーマットされます。

Code Format Example
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が指定されていないか である場合、 dateの日付部分または時刻部分が空か -1どうかに応じて、0、1、または 16 を使用します。

pが指定されていない場合は、現在の年から 50 を引いた値がデフォルトになります。

日付の行列またはセル配列が指定されている場合は、日付文字列の列ベクトルが返されます。

See also: 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) を日付ベクトルに変換します。

日付ベクトルは、それぞれ年、月、日、時間、分、秒を表す 6 つのメンバーを持つ行ベクトルです。

日付数値入力は、スカラー配列または非スカラー配列のいずれかになります。日付文字列入力は、単一の日付文字列、各行が日付文字列である日付の 2 次元文字配列、または各セル要素に単一の日付文字列が含まれる任意の次元のセル文字列配列のいずれかになります。

vは日付ベクトルの 2 次元配列で、行ごとに 1 つの日付ベクトルがあります。配列入力の場合、vの順序は、データ内の日付の列優先順序に基づきます。

f は、日付文字列を解釈するために使用される書式文字列です (を参照datestr)。日付が文字列または文字列のセル配列であるが、書式が指定されていない場合、ヒューリスティックを使用して入力書式を推測します。これらのヒューリスティックによって、ユーザーが期待する結果とは異なる一致がもたらされる可能性があります。また、さまざまな書式を検索するため、比較的時間がかかります。書式文字列fがわかっている場合は、常に指定することをお勧めします。特定の時間コンポーネントを指定しない書式では、値が 0 に設定されます。特定の日付コンポーネントを指定しない書式では、そのコンポーネントはデフォルトで現在の年の 1 月 1 日になります。末尾の文字は、文字に追加の時間/日付情報が含まれていても、日付ベクトルの計算では無視されます。

p は、2 桁の年が参照される世紀の開始年です。指定されていない場合は、現在の年から 50 を引いた値がデフォルトになります。

See also: datenum, datestr, clock, now, date.

: d = addtodate (d, q, f)
シリアル日付 dに、時間q (単位f )を加算します。

f は、、、、、、、"year"またはのいずれ かである必要があります 。 "month""day""hour""minute""second""millisecond"

See also: datenum, datevec, etime.

: c = calendar ()
: c = calendar (d)
: c = calendar (y, m)
: calendar (…)
現在の月間カレンダーを 6x7 行列で返します。

dが指定されている場合は、日付dを含む月のカレンダーを返します。日付 d はシリアル日付数値または日付文字列である必要があります。

yとmが指定されている場合は、 y年 とm月のカレンダーを返します。

出力引数が指定されていない場合は、行列を返す代わりに、カレンダーを画面に出力します。

See also: datenum, datestr.

: [n, s] = weekday (d)
: [n, s] = weekday (d, format)
曜日をnに数値として、 sに文字列として 返します。

曜日は 1 から 7 まで番号が付けられ、最初の日は日曜日です。

dはシリアル日付番号または日付文字列です。

文字列formatが存在しないか等しい場合、 s に"short" は曜日の省略名が含まれます。format が である場合、 sには完全な名前が含まれます。 "long"

フォーマットに基づいた戻り値の表:

n "short" "long"
1 Sun Sunday
2 Mon Monday
3 Tue Tuesday
4 Wed Wednesday
5 Thu Thursday
6 Fri Friday
7 Sat Saturday
See also: eomday, is_leap_year, calendar, datenum, datevec.

: e = eomday (y, m)
y年のm月の最終日を返します。

See also: 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。

See also: datenum, datestr.