ロンドンサーバーでアプリをホストしています。私はスペインのマドリッドにいます。したがって、タイムゾーンは-2時間です。
タイムゾーンで現在の日付/時刻を取得するにはどうすればよいですか。
Date curr_date = new Date(System.currentTimeMillis());
例えば.
Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));
DateTimeZone zone = DateTimeZone.forID("Europe/Madrid");
DateTime dt = new DateTime(zone);
int day = dt.getDayOfMonth();
int year = dt.getYear();
int month = dt.getMonthOfYear();
int hours = dt.getHourOfDay();
int minutes = dt.getMinuteOfHour();
Date
isalwaysUTCベース...またはタイムゾーンニュートラル、表示方法に応じて。 Date
onlyは特定の時点を表します。これはタイムゾーンに依存せず、Unixエポックから数ミリ秒だけです。 「Date
のローカルインスタンス」という概念はありません。 Date
を Calendar
および/または TimeZone.getDefault()
と組み合わせて使用して、「ローカル」タイムゾーンを使用します。 TimeZone.getTimeZone("Europe/Madrid")
を使用して、マドリードのタイムゾーンを取得します。
...または Joda Time を使用します。これにより、全体がより明確になる傾向があります、IMO。 Joda Timeでは、DateTime
値を使用します。これは、特定のカレンダーシステムとタイムゾーンの時間の瞬間です。
Java 8を使用すると、Java.time.ZonedDateTime
、これはJava 8 Joda TimeのDateTime
と同等です。
ジョン・スキートがすでに言ったように、Java.util.Date
にはタイムゾーンがありません。 Date
オブジェクトは、UTC 1970年1月1日午前12:00以降のミリ秒数を表します。タイムゾーン情報は含まれていません。
たとえばSimpleDateFormat
を使用して、Dateオブジェクトを文字列にフォーマットする場合、DateFormat
オブジェクトにタイムゾーンを設定して、どのタイムゾーンで表示するかを知らせることができます。日時:
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Use Madrid's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));
System.out.println("Date and time in Madrid: " + df.format(date));
プログラムが実行されているコンピューターのローカルタイムゾーンが必要な場合は、次を使用します。
df.setTimeZone(TimeZone.getDefault());
Calendar の使用は簡単です:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
Java.timeクラスがJava 8以降に組み込まれている場合:
public static void main(String[] args) {
LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(localNow);
// Prints current time of given zone without zone information : 2016-04-28T15:41:17.611
ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());
System.out.println(zoneNow);
// Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid]
}
これが役立つことを確認してください。私にとってはうまくいきます。コードは夏時間もカバーしました
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
Calendar cal = Calendar.getInstance();
// If needed in hours rather than milliseconds
int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000));
int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000));
int dts = cal.getTimeZone().getDSTSavings();
System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName());
System.out.println("Local Day Light Time Saving : " + dts);
System.out.println("China Time : " + tz.getRawOffset());
System.out.println("Local Offset Time from GMT: " + LocalOffSethrs);
System.out.println("China Offset Time from GMT: " + ChinaOffSethrs);
// Adjust to GMT
cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset()));
// Adjust to Daylight Savings
cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings());
// Adjust to Offset
cal.add(Calendar.MILLISECOND, tz.getRawOffset());
Date dt = new Date(cal.getTimeInMillis());
System.out.println("After adjusting offset Acctual China Time :" + dt);
そのために JodaTime を使用します。 Java.util.Dateは、TimeZoneに関して非常に制限されています。
カレンダーを使用して動作させることができませんでした。 DateFormatを使用する必要があります
//Wednesday, July 20, 2011 3:54:44 PM PDT
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateTimeString = df.format(new Date());
//Wednesday, July 20, 2011
df = DateFormat.getDateInstance(DateFormat.FULL);
df.setTimeZone(TimeZone.getTimeZone("PST"));
final String dateString = df.format(new Date());
//3:54:44 PM PDT
df = DateFormat.getTimeInstance(DateFormat.FULL);
df.setTimeZone(Timezone.getTimeZone("PST"));
final String timeString = df.format(new Date());
以下に例を示します。
Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();
ゾーンの時間を見つけるための手順は次のとおりです。
現在の日付= new Date();
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println("timeZone.......-->>>>>>"+df.format(now));