web-dev-qa-db-ja.com

Javaでタイムゾーンの現在の日付と時刻を取得する方法は?

ロンドンサーバーでアプリをホストしています。私はスペインのマドリッドにいます。したがって、タイムゾーンは-2時間です。

タイムゾーンで現在の日付/時刻を取得するにはどうすればよいですか。

Date curr_date = new Date(System.currentTimeMillis());

例えば.

Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));

Joda-Time

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();
47
Sergio del Amo

Date isalwaysUTCベース...またはタイムゾーンニュートラル、表示方法に応じて。 Dateonlyは特定の時点を表します。これはタイムゾーンに依存せず、Unixエポックから数ミリ秒だけです。 「Dateのローカルインスタンス」という概念はありません。 DateCalendar および/または TimeZone.getDefault() と組み合わせて使用​​して、「ローカル」タイムゾーンを使用します。 TimeZone.getTimeZone("Europe/Madrid")を使用して、マドリードのタイムゾーンを取得します。

...または Joda Time を使用します。これにより、全体がより明確になる傾向があります、IMO。 Joda Timeでは、DateTime値を使用します。これは、特定のカレンダーシステムとタイムゾーンの時間の瞬間です。

Java 8を使用すると、Java.time.ZonedDateTime、これはJava 8 Joda TimeのDateTimeと同等です。

86
Jon Skeet

ジョン・スキートがすでに言ったように、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());
50
Jesper

Calendar の使用は簡単です:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));
Date currentDate = calendar.getTime();
16
dfa

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]
    }
9
Zeeshan

これが役立つことを確認してください。私にとってはうまくいきます。コードは夏時間もカバーしました

    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); 
3
Subhamay

そのために JodaTime を使用します。 Java.util.Dateは、TimeZoneに関して非常に制限されています。

2
Joshua Partogi

カレンダーを使用して動作させることができませんでした。 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());
1
wjin

以下に例を示します。

Calendar c = Calendar.getInstance(TimeZone.getDefault());
Date date = c.getTime();
0

ゾーンの時間を見つけるための手順は次のとおりです。

現在の日付= 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));  
0
shan