新しいDate
オブジェクトを作成すると、現在の時間にローカルタイムゾーンで初期化されます。現在の日時をGMTで取得するにはどうすればよいですか?
Date
そう、タイムゾーンを保持「が、ローカルタイムゾーンでは」(最高で、または不正確な)正しくないしませんを参照してください。すべてのjava.util.Dateについて。
新しいDate
オブジェクトを作成すると、現在の時間にローカルタイムゾーンで初期化されます。現在の日時をGMTで取得するにはどうすればよいですか?
Date
そう、タイムゾーンを保持「が、ローカルタイムゾーンでは」(最高で、または不正確な)正しくないしませんを参照してください。すべてのjava.util.Dateについて。
回答:
java.util.Date
特定のタイムゾーンはありませんが、その値は最も一般的にUTCに関連して考えられます。現地時間だと思うのはなぜですか?
正確にjava.util.Date
は、a内の値は、1970年1月1日深夜UTCで発生したUnixエポックからのミリ秒数です。同じエポックは他のタイムゾーンでも説明できますが、従来の説明ではUTCが使用されています。固定のエポックからのミリ秒数であるため、java.util.Date
ローカルタイムゾーンに関係なく、特定の瞬間の内部の値は世界中で同じです。
問題は、ローカルタイムゾーンを使用するCalendarのインスタンス、またはローカルタイムゾーンDate.toString()
も使用するCalendarのインスタンス、またはSimpleDateFormat
デフォルトでローカルタイムゾーンも使用するインスタンスを介して表示していることだと思います。
これが問題でない場合は、サンプルコードを投稿してください。
ただし、とにかく、より明確なAPIを提供するJoda-Timeを使用することをお勧めします。
java.util.Timestamp
(またはjava.util.Date
)をサーバーのタイムゾーンに変換します。
System.out.println(new Date())
ますか?もしそうなら、toString()
それはそこにタイムゾーンを適用している方法であることに注意する必要があります...そうでない場合は、詳細を教えてください。
toString()
常にデフォルトのタイムゾーンを使用します。date.getTime()
間違いなく、Unixエポックからのミリ秒をUTCで返します。それDate
自体はタイムゾーンをまったく持たないと言うのが最も正確です。それは単なる瞬間であり、複数のタイムゾーンで見なされる可能性があります。ただし、インスタンスを作成するときは、タイムゾーンに依存しません。
Instant.now() // Capture the current moment in UTC.
その値を表す文字列を生成します。
Instant.now().toString()
2016-09-13T23:30:52.123Z
ジョンスキートによって正解述べ、java.util.Dateオブジェクトが持っていないタイムゾーンを†。ただし、そのtoString
実装では、その日時値の文字列表現を生成するときに、JVMのデフォルトのタイムゾーンが適用されます。ナイーブなプログラマーと混同して、Date にはタイムゾーンがあるように見えますが、ありません。
java.util.Date
、j.u.Calendar
、およびjava.text.SimpleDateFormat
Javaのクラスにバンドルさは悪名高い厄介です。それらを避けてください。代わりに、以下の有効な日時ライブラリのいずれかを使用してください。
Java 8は、古いjava.util.Date/Calendarクラスに取って代わる優れた新しいjava.time。*パッケージを提供します。
UTC / GMTで現在の時刻を取得することは簡単なワンライナーです…
Instant instant = Instant.now();
そのInstant
クラスはjava.timeの基本的なビルディングブロックであり、ナノ秒の解像度でUTCのタイムライン上の瞬間を表します。
Java 8では、現在の瞬間が最大数ミリ秒の分解能でキャプチャされます。Java 9は、Clock
ホストコンピュータのクロックハードウェアの能力に応じて、このクラスのフルナノ秒の能力で現在の瞬間をキャプチャする新しい実装をもたらします。
このtoString
メソッドは、1つの特定のISO 8601形式を使用して、その値の文字列表現を生成します。その形式は、秒の端数を表すために必要に応じて、0、3、6、または9桁の数字(ミリ秒、マイクロ秒、またはナノ秒)を出力します。
より柔軟な書式設定またはその他の追加機能が必要な場合は、UTC自体(ZoneOffset.UTC
定数)がを取得するように、ゼロからのオフセットからのオフセットを適用しますOffsetDateTime
。
OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );
コンソールにダンプ…
System.out.println( "now.toString(): " + now );
実行すると…
now.toString(): 2014-01-21T23:42:03.522Z
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.Date
、Calendar
、& SimpleDateFormat
。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様はJSR 310です。
ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。
java.timeオブジェクトをデータベースと直接交換することができます。JDBC 4.2以降に準拠したJDBCドライバーを使用します。文字列もクラスも必要ありません。java.sql.*
java.timeクラスはどこで入手できますか?
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。あなたはここにいくつかの有用なクラスのような見つけることがInterval
、YearWeek
、YearQuarter
、および多くを。
更新:現在メンテナンスモードになっているJoda -Timeプロジェクトは、java.timeクラスへの移行を推奨しています。
使用ジョダタイムサードパーティのオープンソースのフリーのコストライブラリーは、コードのちょうど1行に現在の日付・時刻を取得することができます。
Joda-TimeはJava 8の新しいjava.time。*クラスに影響を与えましたが、アーキテクチャが異なります。古いバージョンのJavaではJoda-Timeを使用できます。Joda-Timeは引き続きJava 8で動作し、アクティブに維持され続けます(2014年現在)。ただし、Joda-Timeチームはjava.timeへの移行を推奨しています。
System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );
より詳細なサンプルコード(Joda-Time 2.3)…
org.joda.time.DateTime now = new org.joda.time.DateTime(); // Default time zone.
org.joda.time.DateTime zulu = now.toDateTime( org.joda.time.DateTimeZone.UTC );
コンソールにダンプ…
System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );
実行すると…
Local time in ISO 8601 format: 2014-01-21T15:34:29.933-08:00
Same moment in UTC (Zulu): 2014-01-21T23:34:29.933Z
タイムゾーンの作業を行うコードの例については、同様の質問に対する私の回答を参照してください。
JVMの現在のデフォルトのタイムゾーン(いつでも変更される可能性があります)に暗黙的に依存するのではなく、常にタイムゾーンを指定することをお勧めします。このような依存は、日時の作業における混乱とバグの一般的な原因のようです。
呼び出しnow()
時に、割り当てられる予定の/予想されるタイムゾーンを渡します。DateTimeZone
クラスを使用します。
DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );
DateTime now = DateTime.now( DateTimeZone.UTC );
JVMの現在のデフォルトのタイムゾーンを本当に使用したい場合は、コードを自己文書化するように明示的に呼び出します。
DateTimeZone zoneDefault = DateTimeZone.getDefault();
ISO 8601形式についてお読みください。java.timeとJoda-Timeはどちらも、文字列の解析と生成の両方のデフォルトとして、その標準の実用的な形式を使用しています。
†実際には、java.util.Dateにはタイムゾーンがあり、ソースコードのレイヤーの下に埋め込まれています。ほとんどの場合、そのタイムゾーンは無視されます。したがって、省略形として、java.util.Dateにはタイムゾーンがないと言います。さらに、その埋め込まれたタイムゾーンは、Dateの方法で使用されているものではありませんtoString
。このメソッドは、JVMの現在のデフォルトのタイムゾーンを使用します。この紛らわしいクラスを避け、Joda-Timeとjava.timeを使い続ける理由はなおさらあります。
DateTime.now().toDateTime(DateTimeZone.UTC)
私が探していたものでした!ありがとう!
DateTime nowUtc = DateTime.now ( DateTimeZone.UTC ) ;
2014-01-21T15:34:29.933-08:00
使用した例のPure Java 8 でこれを取得する方法new org.joda.time.DateTime()
ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) ).truncatedTo( ChronoUnit.MILLIS ).toOffsetDateTime().toString()
指定されたタイムゾーンの現在の時刻を取得します。次に、すべてのマイクロ/ナノを落とします。次に、本格的なタイムゾーンではなく、単なるUTCからのオフセット(時間-分-秒の数)(過去、現在、および将来の履歴の変更で、特定の地域)。最後に、メソッドでOffsetDateTime
デフォルトで使用される標準ISO 8601形式に従って値を表すテキストを生成しますtoString
。
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
//Local time zone
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
これは間違いなくUTC時間を返します:StringおよびDateオブジェクトとして!
static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static Date getUTCdatetimeAsDate() {
// note: doesn't check for null
return stringDateToDate(getUTCdatetimeAsString());
}
public static String getUTCdatetimeAsString() {
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
public static Date stringDateToDate(String StrDate) {
Date dateToReturn = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
try {
dateToReturn = (Date)dateFormat.parse(StrDate);
}
catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
new Date()
ように、デバイスの時間が間違っている場合、Calling は正しいUTC時間を返すことはありません。
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
実際には時間ではありませんが、表現が変更される可能性があります。
SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
時間は地球のどの地点でも同じですが、場所によっては時間に対する認識が異なる場合があります。
カレンダーaGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone( "GMT")); 次に、aGMTCalendarオブジェクトを使用して実行されるすべての操作はGMTタイムゾーンで行われ、夏時間や固定オフセットは適用されません。
違う!
Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()
そして
Calendar aNotGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));aNotGMTCalendar.getTime();
同じ時間に戻ります。Idem for
new Date(); //it's not GMT.
このコードは、現在時刻UTCを出力します。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class Test
{
public static void main(final String[] args) throws ParseException
{
final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
}
}
結果
2013-10-26 14:37:48 UTC
これは、AndroidでUTCミリ秒を取得するために機能します。
Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;
c.add(Calendar.MILLISECOND, (-utcOffset))
utcタイムゾーンでカレンダーを取得するには
Jon Skeetの回答で間違っていると思われるものを次に示します。彼は言った:
java.util.Date
常にUTCです。現地時間だと思うのはなぜですか?問題は、ローカルタイムゾーンを使用するCalendarのインスタンスを介して、またはおそらくDate.toString()
ローカルタイムゾーンも使用するCalendarのインスタンスを介して表示していることだと思います 。
ただし、コード:
System.out.println(new java.util.Date().getHours() + " hours");
no Calendar
およびno SimpleDateFormat
を使用して、GMT(UTC時間)ではなく現地時間を指定します。
だからこそ、何かがおかしいようです。
応答をまとめると、コード:
System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
.get(Calendar.HOUR_OF_DAY) + " Hours");
は現地時間の代わりにGMT時間を示します。これgetTime.getHours()
はDate()
オブジェクトを作成するため欠落していることに注意してください。理論的にはGMTで日付を格納しますが、時間はローカルタイムゾーンで返します。
Date.getHours()
メソッドのドキュメントを読むと、「戻り値は、を含むか、ローカルタイムゾーンで解釈される、このDateオブジェクトによって表される瞬間。」(Emphasis mine。)getHours()
ローカルタイムゾーン内の値を解釈するメソッドDate
です。オブジェクト自体の状態の一部ではありません。
toString
とは、getHours
その出力にデフォルトのタイムゾーンを適用します。つまり、Dateにはタイムゾーンがあるように見えますが、実際にはないので、ナイーブプログラマーは簡単に騙されます。
UTCに合わせてフィールドを調整したDateオブジェクトが必要な場合は、Joda Timeを使用して次のように行うことができます。
import org.joda.time.DateTimeZone;
import java.util.Date;
...
Date local = new Date();
System.out.println("Local: " + local);
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
System.out.println("UTC: " + new Date(utc));
.toDateTime
メソッドを呼び出し、UTCタイムゾーンの定数を渡します。
と:
Calendar cal = Calendar.getInstance();
次にcal
、現在の日付と時刻を取得します。
また、タイムゾーンの現在の日付と時刻を次のように取得できます。
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));
cal.get(Calendar.DATE);
他の詳細について、または他のカレンダー定数を尋ねることができます。
日付とタイムスタンプはJavaでは非推奨です。カレンダークラスではありません。
特定のタイムゾーンと特定の形式でシステム時間をレンダリングするサンプルコード。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class TimZoneTest {
public static void main (String[] args){
//<GMT><+/-><hour>:<minutes>
// Any screw up in this format, timezone defaults to GMT QUIETLY. So test your format a few times.
System.out.println(my_time_in("GMT-5:00", "MM/dd/yyyy HH:mm:ss") );
System.out.println(my_time_in("GMT+5:30", "'at' HH:mm a z 'on' MM/dd/yyyy"));
System.out.println("---------------------------------------------");
// Alternate format
System.out.println(my_time_in("America/Los_Angeles", "'at' HH:mm a z 'on' MM/dd/yyyy") );
System.out.println(my_time_in("America/Buenos_Aires", "'at' HH:mm a z 'on' MM/dd/yyyy") );
}
public static String my_time_in(String target_time_zone, String format){
TimeZone tz = TimeZone.getTimeZone(target_time_zone);
Date date = Calendar.getInstance().getTime();
SimpleDateFormat date_format_gmt = new SimpleDateFormat(format);
date_format_gmt.setTimeZone(tz);
return date_format_gmt.format(date);
}
}
出力
10/08/2011 21:07:21
at 07:37 AM GMT+05:30 on 10/09/2011
at 19:07 PM PDT on 10/08/2011
at 23:07 PM ART on 10/08/2011
これをより簡単にするために、を作成するにはDate
、UTC
次を使用できますCalendar
:
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
これはCalendar
、「UTC」を使用するための新しいインスタンスを構築しますTimeZone
。
Date
そのカレンダーのオブジェクトが必要な場合は、を使用できますgetTime()
。
現在の日時をUTCに変換する:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTimeZone dateTimeZone = DateTimeZone.getDefault(); //Default Time Zone
DateTime currDateTime = new DateTime(); //Current DateTime
long utcTime = dateTimeZone.convertLocalToUTC(currDateTime .getMillis(), false);
String currTime = formatter.print(utcTime); //UTC time converted to string from long in format of formatter
currDateTime = formatter.parseDateTime(currTime); //Converted to DateTime in UTC
toString
DateTimeを呼び出すだけで、ISO 8601文字列パターンを取得できます。(b)タイムゾーン間で変換するにはコードが多すぎる。「toDateTime」を呼び出して、タイムゾーンオブジェクトを渡すだけです。このように:myDateTime.toDateTime( DateTimeZone.UTC )
。特定のタイムゾーンについては、適切な名前に基づいてタイムゾーンオブジェクトをインスタンス化して渡し、を呼び出しますmyDateTime.toDateTime( DateTimeZone.forID( "Asia/Tehran" ) )
。
これは私にとってはうまくいき、GMTでタイムスタンプを返します!
Date currDate;
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
long currTime = 0;
try {
currDate = dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
currTime = currDate.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
このクラスを使用して、オンラインNTPサーバーから正しいUTC時間を取得します。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class NTP_UTC_Time
{
private static final String TAG = "SntpClient";
private static final int RECEIVE_TIME_OFFSET = 32;
private static final int TRANSMIT_TIME_OFFSET = 40;
private static final int NTP_PACKET_SIZE = 48;
private static final int NTP_PORT = 123;
private static final int NTP_MODE_CLIENT = 3;
private static final int NTP_VERSION = 3;
// Number of seconds between Jan 1, 1900 and Jan 1, 1970
// 70 years plus 17 leap days
private static final long OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;
private long mNtpTime;
public boolean requestTime(String host, int timeout) {
try {
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(timeout);
InetAddress address = InetAddress.getByName(host);
byte[] buffer = new byte[NTP_PACKET_SIZE];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);
buffer[0] = NTP_MODE_CLIENT | (NTP_VERSION << 3);
writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET);
socket.send(request);
// read the response
DatagramPacket response = new DatagramPacket(buffer, buffer.length);
socket.receive(response);
socket.close();
mNtpTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);
} catch (Exception e) {
// if (Config.LOGD) Log.d(TAG, "request time failed: " + e);
return false;
}
return true;
}
public long getNtpTime() {
return mNtpTime;
}
/**
* Reads an unsigned 32 bit big endian number from the given offset in the buffer.
*/
private long read32(byte[] buffer, int offset) {
byte b0 = buffer[offset];
byte b1 = buffer[offset+1];
byte b2 = buffer[offset+2];
byte b3 = buffer[offset+3];
// convert signed bytes to unsigned values
int i0 = ((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
int i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F) + 0x80 : b1);
int i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F) + 0x80 : b2);
int i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F) + 0x80 : b3);
return ((long)i0 << 24) + ((long)i1 << 16) + ((long)i2 << 8) + (long)i3;
}
/**
* Reads the NTP time stamp at the given offset in the buffer and returns
* it as a system time (milliseconds since January 1, 1970).
*/
private long readTimeStamp(byte[] buffer, int offset) {
long seconds = read32(buffer, offset);
long fraction = read32(buffer, offset + 4);
return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L);
}
/**
* Writes 0 as NTP starttime stamp in the buffer. --> Then NTP returns Time OFFSET since 1900
*/
private void writeTimeStamp(byte[] buffer, int offset) {
int ofs = offset++;
for (int i=ofs;i<(ofs+8);i++)
buffer[i] = (byte)(0);
}
}
そしてそれを使って:
long now = 0;
NTP_UTC_Time client = new NTP_UTC_Time();
if (client.requestTime("pool.ntp.org", 2000)) {
now = client.getNtpTime();
}
DateTimeStringとして「今」UTC時間が必要な場合は、関数を使用します。
private String get_UTC_Datetime_from_timestamp(long timeStamp){
try{
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
int tzt = tz.getOffset(System.currentTimeMillis());
timeStamp -= tzt;
// DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());
DateFormat sdf = new SimpleDateFormat();
Date netDate = (new Date(timeStamp));
return sdf.format(netDate);
}
catch(Exception ex){
return "";
}
}
と一緒に使用してください:
String UTC_DateTime = get_UTC_Datetime_from_timestamp(now);
日付の解析を避け、GMTのタイムスタンプだけが必要な場合は、次のように使用できます。
final Date gmt = new Timestamp(System.currentTimeMillis()
- Calendar.getInstance().getTimeZone()
.getOffset(System.currentTimeMillis()));
public class CurrentUtcDate
{
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("UTC Time is: " + dateFormat.format(date));
}
}
出力:
UTC Time is: 22-01-2018 13:14:35
必要に応じて日付形式を変更できます。
SimpleDateFormat
。今日、私たちはjava.time
最新のJavaの日付と時刻のAPIを大幅に改善しています。また、Dan、Antonioなどの回答に含まれていないものは何ですか。
java.timeパッケージを使用し、以下のコードを含めます-
ZonedDateTime now = ZonedDateTime.now( ZoneOffset.UTC );
または
LocalDateTime now2 = LocalDateTime.now( ZoneOffset.UTC );
アプリケーションのニーズに応じて。
ZoneOffset
タイムゾーン(ZoneId
)ではなくオフセット()を使用する場合は、OffsetDateTime
がより適切ですZonedDateTime
。(B)LocalDateTime
タイムゾーンやUTCからのオフセットの概念がないため、現在の瞬間のキャプチャには使用しないでください。(C)他の既存の回答がこの資料をカバーし、より良い仕事をしました。この回答がどのように価値を追加するかはわかりません。