Main Content

日付と時刻のユリウス日または 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 の名前と値のペアの引数を使用してタイム ゾーンを指定し、juliandateposixtimedatetime 値を正しく解釈するようにします。

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

JDZJD を比較します。差は、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

PTZPT を比較します。差は、UTC と America/New_York タイム ゾーンのタイム ゾーン オフセット (秒単位) と等しくなります。

PTZ - PT
ans = 1×3

       14400       14400       14400

参考

| | |

関連するトピック