web-dev-qa-db-ja.com

Java 8LocalDateからJavaScriptDate

これをJava LocalDateからJavaScriptDateに変換したい:

{
    "date": {
        "year": 2016,
        "month": "NOVEMBER",
        "dayOfMonth": 15,
        "monthValue": 11,
        "dayOfWeek": "TUESDAY",
        "era": "CE",
        "dayOfYear": 320,
        "leapYear": true,
        "chronology": {
            "id": "ISO",
            "calendarType": "iso8601"
        }
    }
6
Moatez Bouhdid

日付文字列でタイムゾーンが指定されていません。また、JavaScriptの日付は設計上時刻を保存しているのに対し、時刻情報もありません。

文字列はほぼ有効なJSONであるため、JSON.parse()を介して解析できます。閉じているものが1つだけ欠けています}ブラケット。

上記の注意事項を考慮すると、次のアプローチを使用できます。

var input = JSON.parse('{"date":{"year":2016,"month":"NOVEMBER","dayOfMonth":15,"monthValue":11,"dayOfWeek":"TUESDAY","era":"CE","dayOfYear":320,"leapYear":true,"chronology":{"id":"ISO","calendarType":"iso8601"}}}');
            
var day = input.date.dayOfMonth;
var month = input.date.monthValue - 1; // Month is 0-indexed
var year = input.date.year;

var date = new Date(Date.UTC(year, month, day));

console.log(date); // "2016-11-15T00:00:00.000Z"
6
Timo

Javaから他のシステムに時間型を送信するときは、時刻やタイムゾーンなどについて明確にする必要があります。インスタンスが実際にローカル日付である場合は '任意のタイムゾーンを選択して、ユニバーサルタイムライン上のインスタントに変換したい。UTCは任意です。デフォルトタイムゾーンも同様です。

2016年3月14日は、地球の反対側にあるシステムにとっても同じことを意味するはずです。 ISO8601はこの目的のために存在します。

Java LocalDateをJSONでDateTimeFormatter.ISO_LOCAL_DATE.format(localDate)を使用してISO8601形式の文字列としてエンコードし、LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE)を使用してJSONから解析することにより、JSクライアントに送信することをお勧めします。 。

JavaScriptのDateは、古いJava Dateクラスに似ており、同様に誤った名前が付けられています。ただし、JavaScriptのDateは、ISO8601形式の文字列を次のいずれかで適切に解析します。構築またはDate.parse()関数を介して、Date.toISOString()を介してISO8601文字列を生成します。JavaScriptは欠落しているタイムゾーン(Javaでローカル値を示す)をUTCとして解釈することに注意してください。常に使用することで明確にすることができます。 UTCを意味し、JSクライアントが常にゾーン値を送信すると仮定した場合のZuluタイムゾーン。

または、JS-Jodaを使用してください。

1
Dave