web-dev-qa-db-ja.com

Javaで現在の日時を取得する方法

Javaで現在の日付/時刻を取得するための最良の方法は何ですか?

594
user496949

どの形式の日付/時刻が必要かによって異なります。

  • 日付/時刻を単一の数値で表示したい場合は、System.currentTimeMillis()でUNIXエポックからのミリ秒数(Javaのlongとして)として表現されます。この値はUTC時点からのデルタであり、ローカルタイムゾーンから独立しています...システムクロックが正しく設定されていると仮定します。

  • あなたが数字(年、月など)にアクセスすることを可能にする形式で日付/時刻が欲しいならば、あなたは以下のうちの1つを使うことができました:

    • new Date()は、現在の日付/時刻で初期化されたDateオブジェクトを提供します。問題は、Date APIメソッドにはほとんど欠陥があり、そして廃止予定であるということです。

    • Calendar.getInstance()は、デフォルトのCalendarLocaleを使って、現在の日付/時刻で初期化されたTimeZoneオブジェクトを返します。他のオーバーロードでは特定のLocaleTimeZoneを使うことができます。カレンダーは機能しますが、APIはまだ面倒です。

    • new org.joda.time.DateTime()Joda-time オブジェクトをデフォルトのタイムゾーンと年表を使って現在の日付/時刻で初期化します。他にもたくさんのJodaの選択肢があります…ここで説明するには多すぎます。 (ただし、Joda時間にはパフォーマンスの問題があると報告している人もいます。例: JodatimeのLocalDateTimeは、初めて使用すると遅くなります 。)

    • java 8では、LocalDateTime.now()ZonedDateTime.now()を呼び出すと表現が得られます。1 現在の日付/時刻 

Java 8より前のバージョンでは、これらのことを知っている人の大半は Joda-time を使用して、時間ポイントと期間の計算を行うための(はるかに)最良のJava APIを推奨しました。 Java 8では、これはもはや真実ではありません。しかし、あなたがすでにあなたのコードベースでJoda時間を使っているのであれば、強力な方法はありません。2 移行する理由.


1 - LocalDateTimeにタイムゾーンが含まれていないことに注意してください。 javadocが言うように、"オフセットやタイムゾーンなどの追加情報がなければタイムライン上の瞬間を表すことはできません。

2 - あなたがそうしなくてもあなたのコードは壊れません、そしてあなたは非推奨警告を受けません。確かに、Jodaのコードベースはおそらくアップデートを入手するのをやめるでしょうが、それを必要とすることはまずないでしょう。更新がないということは安定性を意味し、それはgoodなことです。また、そのsomeoneがJavaプラットフォームの後退によって引き起こされた問題を解決する可能性が非常に高いことに注意してください。

586
Stephen C

タイムスタンプをYYYY.MM.DD-HH.MM.SS(非常によくあるケース)の形式で出力する必要がある場合は、次のようにします。

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
366

現在の日付をStringにしたい場合は、これを試してください。

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

または

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

http://www.mkyong.com/Java/java-how-to-get-current-date-time-date-and-calender/ /

97
duggu

Java 8 に:

LocalDateTime.now()

タイムゾーン情報が必要な場合

ZonedDateTime.now()

そしてあなたが豪華なフォーマットの文字列を印刷したい場合

System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))
60
Oleg Mikheev

Dateオブジェクトを作成するだけです。

Date date = new Date();
43
Amir Afghani
    // 2015/09/27 15:07:53
    System.out.println( new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 15:07:53
    System.out.println( new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) );

    // 09/28/2015
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime()));

    // 20150928_161823
    System.out.println( new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()) );

    // Mon Sep 28 16:24:28 CEST 2015
    System.out.println( Calendar.getInstance().getTime() );

    // Mon Sep 28 16:24:51 CEST 2015
    System.out.println( new Date(System.currentTimeMillis()) );

    // Mon Sep 28
    System.out.println( new Date().toString().substring(0, 10) );

    // 2015-09-28
    System.out.println( new Java.sql.Date(System.currentTimeMillis()) );

    // 14:32:26
    Date d = new Date();
    System.out.println( (d.getTime() / 1000 / 60 / 60) % 24 + ":" + (d.getTime() / 1000 / 60) % 60 + ":" + (d.getTime() / 1000) % 60 );

    // 2015-09-28 17:12:35.584
    System.out.println( new Timestamp(System.currentTimeMillis()) );

    // Java 8

    // 2015-09-28T16:16:23.308+02:00[Europe/Belgrade]
    System.out.println( ZonedDateTime.now() );

    // Mon, 28 Sep 2015 16:16:23 +0200
    System.out.println( ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) );

    // 2015-09-28
    System.out.println( LocalDate.now(ZoneId.of("Europe/Paris")) ); // rest zones id in ZoneId class

    // 16
    System.out.println( LocalTime.now().getHour() );

    // 2015-09-28T16:16:23.315
    System.out.println( LocalDateTime.now() );
39
blueberry0xff

つかいます:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );

(それは働いています)

18
user1719182

さまざまな方法があります。

14
Greg Hewgill

日付のオブジェクトを作成し、単にそれを印刷してください。

Date d = new Date(System.currentTimeMillis());
System.out.print(d);
10
Subodh

上記の解決方法と似ています。しかし、私はいつも自分自身がこのコードの塊を探しているのを見つけます。

Date date=Calendar.getInstance().getTime();
System.out.println(date);
9
JeffJak

Java.util.Dateを見ましたか?それはまさにあなたが望むものです。

9
Starkey
Java.util.Date date = new Java.util.Date();

インスタンス化された時間が自動的に入力されます。

8
Rudy

Java.util.Dateの場合は、新しいDate()を作成するだけです。

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date)); //2016/11/16 12:08:43

Java.util.Calendarの場合は、Calendar.getInstance()を使用します。

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal)); //2016/11/16 12:08:43

Java.time.LocalDateTimeの場合は、LocalDateTime.now()を使用します。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now)); //2016/11/16 12:08:43

Java.time.LocalDateの場合は、LocalDate.now()を使用します。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.now();
System.out.println(dtf.format(localDate)); //2016/11/16

参照: https://www.mkyong.com/Java/java-how-to-get-current-date-time-date-and-calender/ /

7
amit pandya

1st Java.util.Dateクラスを理解する

1.1現在の日付を取得する方法

import Java.util.Date;

class Demostration{
    public static void main(String[]args){
        Date date = new Date(); // date object
        System.out.println(date); // Try to print the date object
    }
}

1.2 getTime()メソッドの使い方

import Java.util.Date;
public class Main {
    public static void main(String[]args){
        Date date = new Date();
        long timeInMilliSeconds = date.getTime();
        System.out.println(timeInMilliSeconds);
    }
}

これは、1970年1月1日、GMTの00:00:00からの時間比較のためのミリ秒数を返します。

1.3 SimpleDateFormatクラスを使って時間をフォーマットする方法

import Java.text.DateFormat;
import Java.text.SimpleDateFormat;
import Java.util.Date;

class Demostration{
    public static void main(String[]args){
        Date date=new Date();
        DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate=dateFormat.format(date);
        System.out.println(formattedDate);
    }
}

また、 "yyyy-MM-dd hh:mm:ss"のような異なるフォーマットパターンを使用して、希望のパターンを選択してください。 http://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html

第2 Java.util.Calendarクラスを理解する

2.1カレンダクラスを使って現在のタイムスタンプを取得する

import Java.util.Calendar;

class Demostration{
    public static void main(String[]args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar.getTime());
    }
}

2.2カレンダーを別の日付に設定するためにsetTimeやその他のsetメソッドを使ってみてください。

ソース: http://javau91.blogspot.com/ /

6
u91

これが最善の方法だと思います。

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime())); // 2014/08/06 16:00:22
6
kelevra88

つかいます:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd::HH:mm:ss");
System.out.println(sdf.format(System.currentTimeMillis()));

PrintステートメントはSimpleDateFormatが作成された時ではなく呼び出された時を表示します。そのため、新しいオブジェクトを作成せずに繰り返し呼び出すことができます。

4
joe pelletier

前述のように、基本的なDate()は現在時刻を取得するという点であなたが必要とすることをすることができます。私の最近のJava日付を多用した経験では、(多くのDateクラス・メソッドの非推奨と同様に)組み込みクラスには多くの奇妙な点があります。私が際立っていた1つの奇妙な点は、技術的な観点からは月が0から始まるということですが、実際には非常に混乱する可能性があります。

現在の日付だけで十分な場合があります。ただし、日付を使用して多くの操作や計算を行う場合は、サードパーティのライブラリを使用することが非常に有益です(多くのJava開発者が満足していないため組み込み機能)。

Joda-timeが日付を使って作業を単純化するのに非常に役立つことがわかったので、私は2度目のStephen Cの推薦をします、それはまた非常によく文書化されています。私は、(DateUtilsとして)静的なラッパークラスを書くことさえしました。これを使って、私の一般的な日付操作をすべて統合して単純化しました。 

3
David Fioretti

新しいData-Time APIは、Java 8の夜明けとともに導入されました。これは、古いData-Time APIで発生した以下の問題が原因です。

タイムゾーンを扱うのが難しい:タイムゾーンを扱うためにたくさんのコードを書く必要があります。

スレッドセーフではない:Java.util.Dateはスレッドセーフではありません。

Java 8を見てみましょう。

import Java.time.LocalDate;
import Java.time.LocalTime;
import Java.time.LocalDateTime;
import Java.time.Month;


public class DataTimeChecker {

    public static void main(String args[]) {
        DataTimeChecker dateTimeChecker = new DataTimeChecker();
        dateTimeChecker.DateTime();
    }

    public void DateTime() {
        // Get the current date and time
        LocalDateTime currentTime = LocalDateTime.now();
        System.out.println("Current DateTime: " + currentTime);

        LocalDate date1 = currentTime.toLocalDate();
        System.out.println("Date : " + date1);

        Month month = currentTime.getMonth();
        int day = currentTime.getDayOfMonth();
        int seconds = currentTime.getSecond();

        System.out.println("Month : " + month);
        System.out.println("Day : " + day);
        System.out.println("Seconds : " + seconds);

        LocalDateTime date2 = currentTime.withDayOfMonth(17).withYear(2018);
        System.out.println("Date : " + date2);

        //Prints 17 May 2018
        LocalDate date3 = LocalDate.of(2018, Month.MAY, 17);
        System.out.println("Date : " + date3);

        //Prints 04 hour 45 minutes
        LocalTime date4 = LocalTime.of(4, 45);
        System.out.println("Date : " + date4);

        // Convert to a String 
        LocalTime date5 = LocalTime.parse("20:15:30");
        System.out.println("Date : " + date5);
    }
}

上記のコーディングの出力:

Current DateTime: 2018-05-17T04:40:34.603
Date : 2018-05-17
Month : MAY
Day : 17
Seconds : 34
Date : 2018-05-17T04:40:34.603
Date : 2018-05-17
Date : 04:45
Date : 20:15:30
3
Dulith De Costa

Date クラスを見てください。より新しい Calendar クラスもあります。これは多くの日付/時刻操作を行うための好ましい方法です(Dateの多くのメソッドは推奨されなくなりました)。

現在の日付だけが欲しい場合は、新しいDateオブジェクトを作成するかCalendar.getInstance();を呼び出します。

3
Michael Berry
import Java.util.*;
import Java.text.*;

public class DateDemo {
   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

現在のデータを取得するためにdateを使うことができます。 SimpleDateFormat get formatを使って

1
Madhuka Dilhan
 System.out.println( new SimpleDateFormat("yyyy:MM:dd - hh:mm:ss a").format(Calendar.getInstance().getTime()) );
    //2018:02:10 - 05:04:20 PM

午前/午後の日付/時刻

1
Shinwar ismail

私はこのメソッドを作成しました、それは私のために働きます...

public String GetDay() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd")));
}

public String GetNameOfTheDay() {
    return String.valueOf(LocalDateTime.now().getDayOfWeek());
}

public String GetMonth() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM")));
}

public String GetNameOfTheMonth() {
    return String.valueOf(LocalDateTime.now().getMonth());
}

public String GetYear() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy")));
}

public boolean isLeapYear(long year) {
    return Year.isLeap(year);
}

public String GetDate() {
    return GetDay() + "/" + GetMonth() + "/" + GetYear();
}

public String Get12HHour() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("hh")));
}

public String Get24HHour() {
    return String.valueOf(LocalDateTime.now().getHour());
}

public String GetMinutes() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("mm")));
}

public String GetSeconds() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("ss")));
}

public String Get24HTime() {
    return Get24HHour() + ":" + GetMinutes();
}

public String Get24HFullTime() {
    return Get24HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

public String Get12HTime() {
    return Get12HHour() + ":" + GetMinutes();
}

public String Get12HFullTime() {
    return Get12HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}
0
PotterOleagaCR

Dateオブジェクトを使用して、自分でフォーマットできます。例として、フォーマットするのが難しく、より多くのコードが必要です。

Date dateInstance = new Date();
int year = dateInstance.getYear()+1900;//Returns:the year represented by this date, minus 1900.
int date = dateInstance.getDate();
int month = dateInstance.getMonth();
int day = dateInstance.getDay();
int hours = dateInstance.getHours();
int min = dateInstance.getMinutes();
int sec = dateInstance.getSeconds();

String dayOfWeek = "";
switch(day){
    case 0:
        dayOfWeek = "Sunday";
        break;
    case 1:
        dayOfWeek = "Monday";
        break;
    case 2:
        dayOfWeek = "Tuesday";
        break;
    case 3:
        dayOfWeek = "Wednesday";
        break;
    case 4:
        dayOfWeek = "Thursday";
        break;
    case 5:
        dayOfWeek = "Friday";
        break;
    case 6:
        dayOfWeek = "Saturday";
        break;
}
System.out.println("Date: " + year +"-"+ month + "-" + date + " "+ dayOfWeek);
System.out.println("Time: " + hours +":"+ min + ":" + sec);

出力:

Date: 2017-6-23 Sunday
Time: 14:6:20

ご覧のとおり、これが最も悪い方法であり、Oracleのドキュメントによれば deprecated です。

Oracleドキュメント:

Dateクラスは、特定の瞬間をミリ秒の精度で表します。

JDK 1.1より前は、Dateクラスには2つの追加機能がありました。日付を年、月、日、時間、分、秒の値として解釈できました。また、日付文字列のフォーマットと解析も許可されました。残念ながら、これらの関数のAPIは国際化に対応していませんでした。 JDK 1.1では、Calendarクラスを使用して日付フィールドと時刻フィールドを変換し、DateFormatクラスを使用して日付文字列をフォーマットおよび解析する必要があります。 Dateの対応するメソッドは非推奨です。

そのため、代わりに Calendar classを使用できます。

Calendar.YEAR;
//and lot more

現在の時刻を取得するには、次を使用できます。

Calendar rightNow = Calendar.getInstance();

Doc:

他のロケール依存クラスと同様に、Calendarは、このタイプの一般的に有用なオブジェクトを取得するためのクラスメソッドgetInstanceを提供します。カレンダーのgetInstanceメソッドは、現在の日付と時刻でカレンダーフィールドが初期化されたCalendarオブジェクトを返します

日付のみを取得するためのコードの下

Date rightNow = Calendar.getInstance().getTime();
System.out.println(rightNow);

また、Calendarクラスにはサブクラスがあります。 GregorianCalendar は、それらの1つであり、Calendarの具象サブクラスであり、世界のほとんどで使用されている標準のカレンダーシステムを提供します。

GregorianCalendarを使用した例:

Calendar cal = new GregorianCalendar();
int hours = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int ap = cal.get(Calendar.AM_PM);

String amVSpm;
if(ap == 0){
    amVSpm = "AM";
}else{
    amVSpm = "PM";
}

String timer = hours + "-" + minute + "-" + second + " " +amVSpm;
System.out.println(timer);

SimpleDateFormat を使用して、日付を簡単かつ迅速にフォーマットできます。

String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

String date = simpleDateFormat.format(new Date());
System.out.println(date);

これを読んでください Jakob Jenkov tutorial:Java SimpleDateFormat

他の人が述べたように、日付から操作を行う必要があるとき、シンプルで最良の方法がなかったか、組み込みクラス、APIに満足できませんでした。

例として、 2つの日付間で異なる が必要な場合、 2つの日付を比較する(これには組み込みのメソッドもあります) などがあります。サードパーティのライブラリを使用する必要がありました。好評で人気のあるものの1つは Joda Time。

また読む:

。最も幸せなのは(Java 8で)、何らかの理由でライブラリをダウンロードして使用する必要がないことです。 Java 8で現在の日付と時刻を取得する簡単な例

LocalTime localTime = LocalTime.now();
System.out.println(localTime);

//with time zone
LocalTime localTimeWtZone = LocalTime.now(ZoneId.of("GMT+02:30"));
System.out.println(localTimeWtZone);

Java 8 dateについて読むのに良いブログ投稿 の1つ。

Javaの日付と時刻については、覚えておいてください。取得および使用できる方法や有用な方法が他にもたくさんあるためです。

編集:

@BasilBourqueコメントによると、Java.util.DateJava.util.CalendarJava.text.SimpleTextFormatなどの厄介な古い日時クラスは legacy に置き換えられ、 Java.timeクラス

0
Blasanka

同じ質問があったときに必要なのはそれだけなので、先に進んでこの答えを投げ入れます。

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

currentDateは、JavaのDateオブジェクトの現在の日付になりました。

0
ThePartyTurtle

このコードを試してください。

import Java.text.DateFormat;
import Java.text.SimpleDateFormat;
import Java.util.Calendar;
import Java.util.Date;
public class CurrentTimeDateCalendar {
    public static void getCurrentTimeUsingDate() {
        Date date = new Date();
        String strDateFormat = "hh:mm:ss a";
        DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
        String formattedDate= dateFormat.format(date);
        System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
    }
    public static void getCurrentTimeUsingCalendar() {
        Calendar cal = Calendar.getInstance();
        Date date=cal.getTime();
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        String formattedDate=dateFormat.format(date);
        System.out.println("Current time of the day using Calendar - 24 hour format: "+ formattedDate);
    }
}

出力例は次のとおりです。

日付を使用した現在の時刻 - 12時間形式:11:13:01 PM

カレンダーを使用した現在の時刻 - 24時間形式:23:13:01

より多くの情報:

現在の日時をJavaで取得する

0
Majid Roustaei