@@ -271,6 +271,8 @@ TypeScriptの\ ``Date``\ 型は数字に毛の生えたようなものですの
271271
272272 UTCの時刻から生成したい場合には、\ ``Date.UTC() ``\ 関数を使います。これはエポック秒を返すのでこれを\ ``new Date() ``\ に渡すことで、UTC指定の時刻のインスタンスが作成できます。
273273
274+ .. code-block :: ts
275+
274276 // UTCの2020年9月21日11時10分5秒
275277 // 日本で実行すると日本時間20時(日本時間はUTCは9時間進んでいるように見える)に
276278 const d = new Date(Date.UTC(2020, 8, 21, 11, 10, 5))
@@ -387,7 +389,7 @@ Goでは日付のフォーマットが何種類か選べますが、このうち
387389 Pythonとの交換の場合
388390~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
389391
390- Pythonで出力する場合は\ ``datetime.datetime.isoformat() ``\ メソッドを使うと良いでしょう。このメソッドはタイムゾーン情報を取り払い、現在のタイムゾーンの表記そのものをフォーマットして出力します。TypeScriptの\ ``new Date() ``\ はUTCであることを前提としてパースするため、出力時はUTCとして出すように心がける必要があります。このUTCで出色された文字列はTypeScriptでパースできます 。
392+ Pythonで出力する場合は\ ``datetime.datetime.isoformat() ``\ メソッドを使うと良いでしょう。このメソッドはタイムゾーン情報を取り払い、現在のタイムゾーンの表記そのものをフォーマットして出力します。TypeScriptの\ ``new Date() ``\ はUTCであることを前提としてパースするため、出力時はUTCとして出すように心がける必要があります。このUTCで出力された文字列はTypeScriptでパースできます 。
391393
392394.. code-block :: python
393395
@@ -404,7 +406,7 @@ Pythonで出力する場合は\ ``datetime.datetime.isoformat()``\ メソッド
404406 utctime.isoformat()
405407 # 2020-09-21T13:42:58.279772+00:00
406408
407- パースはやっかいです。Stack Overflowでスレッドが立つぐらいのネタです\ [# ]_\ 。Python 3.7からは``fromisoformat()``\ というクラスメソッドが増えましたが、以前からの\ ``datetime.strptime() ``\ にフォーマット指定を与えた方が高速とのことです。
409+ パースはやっかいです。Stack Overflowでスレッドが立つぐらいのネタです\ [# ]_\ 。Python 3.7からは\ ``fromisoformat() ``\ というクラスメソッドが増えましたが、以前からの\ ``datetime.strptime() ``\ にフォーマット指定を与えた方が高速とのことです。
408410
409411.. code-block :: python
410412
@@ -427,3 +429,51 @@ Pythonで出力する場合は\ ``datetime.datetime.isoformat()``\ メソッド
427429 # datetime.datetime(2020, 9, 21, 12, 38, 15, 655000, tzinfo=datetime.timezone.utc)
428430
429431 .. [# ] https://stackoverflow.com/questions/127803/how-do-i-parse-an-iso-8601-formatted-date
432+
433+ Javaとの交換の場合(8以降)
434+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
435+
436+ Java8から標準になったクラス群\ [# ]_\ を使ってTypeScriptとの交換を行ってみます。ここで紹介するコードはJava8以降で動作するはずです。このサンプルはJava 11で検証しています。
437+
438+ ``Date.toISOString() ``\ と同等の出力は\ ``DateTimeFormatter ``\ で作成できます。UTCのゾーンになるようにインスタンスを作成してから\ ``format() ``\ メソッドを使って変換します。
439+
440+ .. code-block :: java
441+
442+ import java.time.Instant ;
443+ import java.time.ZonedDateTime ;
444+ import java.time.ZoneId ;
445+ import java.time.format.DateTimeFormatter ;
446+
447+ class ParseTest {
448+ public static void main (String [ ] args ) {
449+ var RFC3339_FORMAT = DateTimeFormatter . ofPattern(" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
450+
451+ var l = ZonedDateTime . now();
452+ var isoString = l. withZoneSameInstant(ZoneOffset . UTC ). format(RFC3339_FORMAT );
453+ System . out. println(isoString);
454+ // "2020-09-23T13:55:53.780Z"
455+ }
456+ }
457+
458+ この文字列はTypeScriptでパースできます。
459+
460+ TypeScriptで生成した文字列のパースには前述の\ ``DateTimeFormatter ``\ も使えますが、それ以外には\ ``java.time.Instant ``\ が使えます。これはある時点での時刻を表すクラスです。TypeScriptの\ ``Date.toISOString() ``\ の出力する文字列をパースできます。実際に日時の操作を行う\ ``LocalDateTime ``\ や\ ``ZonedDateTime ``\ へも、ここから変換できます。次のサンプルは\ ``Instant ``\ でパースし、\ ``ZonedDateTime ``\ に変換しています。
461+
462+ .. code-block :: java
463+
464+ import java.time.Instant ;
465+ import java.time.ZonedDateTime ;
466+ import java.time.ZoneId ;
467+ import java.time.format.DateTimeFormatter ;
468+
469+ class ParseTest {
470+ public static void main (String [ ] args ) {
471+ var i = Instant . parse(" 2020-09-23T14:06:11.027Z" );
472+ var l = ZonedDateTime . ofInstant(i, ZoneId . systemDefault());
473+
474+ var f = DateTimeFormatter . ofPattern(" yyyy/MM/dd HH:mm:ss" );
475+ System . out. println(l. format(f));
476+ }
477+ }
478+
479+ .. [# ] `Java8の日時APIはとりあえずこれだけ覚えとけ <https://qiita.com/tag1216/items/91a471b33f383981bfaa >`_
0 commit comments