Javaで現在の日付/時刻を取得するための最良の方法は何ですか?
どの形式の日付/時刻が必要かによって異なります。
日付/時刻を単一の数値で表示したい場合は、System.currentTimeMillis()
でUNIXエポックからのミリ秒数(Javaのlong
として)として表現されます。この値はUTC時点からのデルタであり、ローカルタイムゾーンから独立しています...システムクロックが正しく設定されていると仮定します。
あなたが数字(年、月など)にアクセスすることを可能にする形式で日付/時刻が欲しいならば、あなたは以下のうちの1つを使うことができました:
new Date()
は、現在の日付/時刻で初期化されたDate
オブジェクトを提供します。問題は、Date
APIメソッドにはほとんど欠陥があり、そして廃止予定であるということです。
Calendar.getInstance()
は、デフォルトのCalendar
とLocale
を使って、現在の日付/時刻で初期化されたTimeZone
オブジェクトを返します。他のオーバーロードでは特定のLocale
やTimeZone
を使うことができます。カレンダーは機能しますが、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プラットフォームの後退によって引き起こされた問題を解決する可能性が非常に高いことに注意してください。
タイムスタンプをYYYY.MM.DD-HH.MM.SS(非常によくあるケース)の形式で出力する必要がある場合は、次のようにします。
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
現在の日付を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/ /
Java 8 に:
LocalDateTime.now()
タイムゾーン情報が必要な場合
ZonedDateTime.now()
そしてあなたが豪華なフォーマットの文字列を印刷したい場合
System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))
Dateオブジェクトを作成するだけです。
Date date = new Date();
// 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() );
つかいます:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );
(それは働いています)
さまざまな方法があります。
日付のオブジェクトを作成し、単にそれを印刷してください。
Date d = new Date(System.currentTimeMillis());
System.out.print(d);
上記の解決方法と似ています。しかし、私はいつも自分自身がこのコードの塊を探しているのを見つけます。
Date date=Calendar.getInstance().getTime();
System.out.println(date);
Java.util.Dateを見ましたか?それはまさにあなたが望むものです。
Java.util.Date date = new Java.util.Date();
インスタンス化された時間が自動的に入力されます。
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/ /
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/ /
これが最善の方法だと思います。
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
つかいます:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd::HH:mm:ss");
System.out.println(sdf.format(System.currentTimeMillis()));
PrintステートメントはSimpleDateFormat
が作成された時ではなく呼び出された時を表示します。そのため、新しいオブジェクトを作成せずに繰り返し呼び出すことができます。
前述のように、基本的なDate()は現在時刻を取得するという点であなたが必要とすることをすることができます。私の最近のJava日付を多用した経験では、(多くのDateクラス・メソッドの非推奨と同様に)組み込みクラスには多くの奇妙な点があります。私が際立っていた1つの奇妙な点は、技術的な観点からは月が0から始まるということですが、実際には非常に混乱する可能性があります。
現在の日付だけで十分な場合があります。ただし、日付を使用して多くの操作や計算を行う場合は、サードパーティのライブラリを使用することが非常に有益です(多くのJava開発者が満足していないため組み込み機能)。
Joda-timeが日付を使って作業を単純化するのに非常に役立つことがわかったので、私は2度目のStephen Cの推薦をします、それはまた非常によく文書化されています。私は、(DateUtilsとして)静的なラッパークラスを書くことさえしました。これを使って、私の一般的な日付操作をすべて統合して単純化しました。
新しい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
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を使って
System.out.println( new SimpleDateFormat("yyyy:MM:dd - hh:mm:ss a").format(Calendar.getInstance().getTime()) );
//2018:02:10 - 05:04:20 PM
午前/午後の日付/時刻
私はこのメソッドを作成しました、それは私のために働きます...
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();
}
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.Date
、Java.util.Calendar
、Java.text.SimpleTextFormat
などの厄介な古い日時クラスは legacy に置き換えられ、 Java.time
クラス 。
同じ質問があったときに必要なのはそれだけなので、先に進んでこの答えを投げ入れます。
Date currentDate = new Date(System.currentTimeMillis());
currentDate
は、JavaのDate
オブジェクトの現在の日付になりました。
このコードを試してください。
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
より多くの情報: