日付と時刻のユリウス日または POSIX 時間への変換
特殊な数値形式の時点を表すように、datetime
配列を変換できます。一般的に、これらの形式では、ある時点を、指定した開始時点からの経過秒数または日数で表します。たとえば、ユリウス日は、ユリウス周期開始以降の経過日数と端数の日数です。POSIX® 時間は、1970 年 1 月 1 日 00:00:00 UTC (協定世界時) 以降の経過秒数です。MATLAB® では、関数 juliandate
および posixtime
を使用して、datetime
配列をユリウス日および POSIX 時間に変換します。
datetime
配列にはタイム ゾーンは不要ですが、"ゾーンなし" の datetime
値をユリウス日または POSIX 時間に変換すると、予期しない結果となる可能性があります。想定どおりの結果を得るためには、変換前にタイム ゾーンを指定します。
変換前のタイム ゾーンの指定
datetime
配列のタイム ゾーンは指定可能ですが、必須ではありません。実際に、既定では、関数 datetime
は "ゾーンなし" の datetime
配列を作成します。
現在の日付と時刻の datetime
値を作成します。
d = datetime("now")
d = datetime
12-Feb-2024 23:16:35
d
はマシン上の現地時間から作成され、タイム ゾーンは関連付けられていません。多くの場面で、ゾーンなしの datetime
配列の時間は現地時間として扱うことができると考えるかもしれません。しかし、関数 juliandate
および posixtime
は、ゾーンなしの datetime
配列の時間を、現地時間ではなく UTC 時間として扱います。あいまいさを回避するために、juliandate
および posixtime
は、ゾーンなしの datetime
配列では使用しないことを推奨します。たとえば、コード内では posixtime(datetime("now"))
の使用を避けてください。
datetime
配列に UTC 時間を表さない値が含まれている場合は、TimeZone
の名前と値のペアの引数を使用してタイム ゾーンを指定し、juliandate
と posixtime
が datetime
値を正しく解釈するようにします。
d = datetime("now","TimeZone","America/New_York")
d = datetime
12-Feb-2024 23:16:35
代わりに、配列を作成した後に TimeZone
プロパティを指定することもできます。
d.TimeZone = "America/Los_Angeles"
d = datetime
12-Feb-2024 20:16:35
タイム ゾーンの完全なリストを確認するには、関数 timezones
を使用します。
ゾーン付きまたはゾーンなしの datetime 値のユリウス日への変換
ユリウス日は、先発グレゴリオ暦の紀元前 4714 年 11 月 24 日正午以降または先発ユリウス暦の紀元前 4713 年 1 月 1 日以降の日数 (端数の日数を含む) です。datetime
配列をユリウス日に変換するには、関数 juliandate
を使用します。
datetime
配列を作成し、タイム ゾーンを指定します。
DZ = datetime("2016-07-29 10:05:24") + calmonths(1:3); DZ.TimeZone = "America/New_York"
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
D
を等価のユリウス日に変換します。
format longG
JDZ = juliandate(DZ)
JDZ = 1×3
2457630.08708333 2457661.08708333 2457691.08708333
DZ
のゾーンなしのコピーを作成します。D
を等価のユリウス日に変換します。D
にはタイム ゾーンがないため、juliandate
は時間を UTC 時間として扱います。
D = DZ;
D.TimeZone = "";
JD = juliandate(D)
JD = 1×3
2457629.92041667 2457660.92041667 2457690.92041667
JDZ
と JD
を比較します。差は、UTC と America/New_York
タイム ゾーンのタイム ゾーン オフセット (端数の日数単位) と等しくなります。
JDZ - JD
ans = 1×3
0.166666666511446 0.166666666511446 0.166666666511446
ゾーン付きまたはゾーンなしの datetime 値の POSIX 時間への変換
POSIX 時間は 1970 年 1 月 1 日 00:00:00 UTC (協定世界時) 以降の経過秒数 (非整数の秒数を含む) で、うるう秒は無視します。datetime
配列を POSIX 時間に変換するには、関数 posixtime
を使用します。
datetime
配列を作成し、タイム ゾーンを指定します。
DZ = datetime("2016-07-29 10:05:24") + calmonths(1:3); DZ.TimeZone = "America/New_York"
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
D
を等価の POSIX 時間に変換します。
PTZ = posixtime(DZ)
PTZ = 1×3
1472479524 1475157924 1477749924
DZ
のゾーンなしのコピーを作成します。D
を等価の POSIX 時間に変換します。D
にはタイム ゾーンがないため、posixtime
は時間を UTC 時間として扱います。
D = DZ;
D.TimeZone = "";
PT = posixtime(D)
PT = 1×3
1472465124 1475143524 1477735524
PTZ
と PT
を比較します。差は、UTC と America/New_York
タイム ゾーンのタイム ゾーン オフセット (秒単位) と等しくなります。
PTZ - PT
ans = 1×3
14400 14400 14400
参考
datetime
| timezones
| posixtime
| juliandate