java.util.Date
オブジェクトをString
Javaでに変換したい。
フォーマットは 2010-05-30 22:15:52
Date
2019 は使用しないことをお勧めします。そのクラスは設計が不十分で、古くなっています。代わりにInstant
、java.timeのまたは別のクラスを使用してください。これは、最新のJava日時APIです。
java.util.Date
オブジェクトをString
Javaでに変換したい。
フォーマットは 2010-05-30 22:15:52
Date
2019 は使用しないことをお勧めします。そのクラスは設計が不十分で、古くなっています。代わりにInstant
、java.timeのまたは別のクラスを使用してください。これは、最新のJava日時APIです。
回答:
メソッドを使用して日付を文字列に変換しDateFormat#format
ます。
String pattern = "MM/dd/yyyy HH:mm:ss";
// Create an instance of SimpleDateFormat used for formatting
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);
// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();
// Using DateFormat format method we can create a string
// representation of a date with the defined format.
String todayAsString = df.format(today);
// Print the result!
System.out.println("Today is: " + todayAsString);
Calendar
プレーンの代わりに使用するのnew Date()
ですか?違いはありますか?
MM/dd/yyyy
フォーマットは愚かで壊れています。使用しないでください。常にdd/MM/yyyy
またはを使用してくださいyyyy-MM-dd
。
yyyy-MM-dd
どこでも好きですが、あなたは何ができますか?)
Commons-lang DateFormatUtilsには多くの利点があります(クラスパスにcommons-langがある場合)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
null
チェックが必要です。
myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`.
.atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String.
.replace( "T" , " " ) // Put a SPACE in the middle.
2014-11-14 14:05:09
現代の方法は、厄介な古いレガシー日時クラスに取って代わるjava.timeクラスを使用する方法です。
まず、あなたを変換java.util.Date
しますInstant
。このInstant
クラスは、ナノ秒の分解能(小数点以下9桁まで)でUTCのタイムライン上の瞬間を表します。
java.timeとの間の変換は、古いクラスに追加された新しいメソッドによって実行されます。
Instant instant = myUtilDate.toInstant();
どちらもあなたjava.util.Date
とjava.time.Instant
しているUTC。日付と時刻をUTCで表示したい場合は、そうしてください。toString
標準のISO 8601形式で文字列を生成するために呼び出します。
String output = instant.toString();
2014-11-14T14:05:09Z
その他の形式の場合はInstant
、より柔軟な形式に変換する必要がありますOffsetDateTime
。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
odt.toString():2020-05-01T21:25:35.957Z
IdeOne.comでコードがライブで実行されることを確認してください。
目的の形式の文字列を取得するには、を指定しますDateTimeFormatter
。カスタム形式を指定できます。しかし、私は事前定義されたフォーマッタ(ISO_LOCAL_DATE_TIME
)の1つを使用しT
、その出力のをSPACEに置き換えます。
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
ちなみに、UTCからのオフセットやタイムゾーン情報を意図的に失うようなこの形式のフォーマットはお勧めしません。その文字列の日時値の意味についてあいまいさを作り出します。
また、日付時刻値の文字列表現で小数秒は無視される(事実上切り捨てられる)ため、データ損失にも注意してください。
特定の地域の実時間のレンズを通して同じ瞬間を見るには、を適用してZoneId
を取得しZonedDateTime
ます。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString():2014-11-14T14:05:09-05:00 [アメリカ/モントリオール]
フォーマットされた文字列を生成するには、上記と同じことをodt
行いzdt
ますが、に置き換えます。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
このコードを非常に多く実行する場合は、もう少し効率的になり、への呼び出しを避けたい場合がありますString::replace
。その呼び出しを削除すると、コードも短くなります。必要に応じて、独自のDateTimeFormatter
オブジェクトで独自のフォーマットパターンを指定します。このインスタンスを定数またはメンバーとしてキャッシュして再利用します。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second.
インスタンスを渡して、そのフォーマッターを適用します。
String output = zdt.format( f );
java.timeのフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、次のような面倒な古い日付時刻クラスに取って代わりますjava.util.Date
、.Calendar
、& java.text.SimpleDateFormat
。
ジョダタイムプロジェクトは、今でメンテナンスモード、java.timeへの移行をアドバイスします。
詳細については、Oracleチュートリアルを参照してください。スタックオーバーフローで多くの例と説明を検索してください。
java.time機能の多くは、ThreeTen -BackportでJava 6&7にバックポートされ、さらにThreeTenABPでAndroidに適合します(使用方法を参照…)。
ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeに将来追加される可能性があることを証明する場です。
atOffset
メソッドがあります。JavadocをInstant
参照してください Instant::atOffset
。Java 8では、次のような呼び出しInstant.now().atOffset( ZoneOffset.UTC ).toString()
が実行されます。import
ステートメントを確認してください。IDE /プロジェクトが以前のバージョンのJavaではなくJava 8以降を実行するように設定されていることを確認します。IdeOne.comで実行中のコードをご覧ください:ideone.com/2Vm2O5
昔ながらのJavaの代替ワンライナー:
String.format("The date: %tY-%tm-%td", date, date, date);
String.format("The date: %1$tY-%1$tm-%1$td", date);
String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);
String.format("The date and time in ISO format: %tF %<tT", date);
これは、使用してフォーマッタと相対インデックスを代わりにSimpleDateFormat
されたスレッドセーフではない、ところで。
少し繰り返しが多いですが、必要なのは1つのステートメントだけです。これは、場合によっては便利です。
Joda(org.joda.time.DateTime)を使用しないのはなぜですか?基本的にワンライナーです。
Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");
// output: 2014-11-14 14:05:09
DateTime
オブジェクトにJVMの現在のデフォルトのタイムゾーンを割り当てるのではなく、DateTimeZoneも渡すことをお勧めします。new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
SimpleDateFormatを探しているようです。
形式:yyyy-MM-dd kk:mm:ss
HH
(0-23)がより一般的です。
シングルショットで;)
日付を取得するには
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
時間を取得するには
String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());
日付と時刻を取得するには
String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());
ハッピーコーディング:)
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8&9のJavaを参照してくださいに組み込まれたクラスOracleでのチュートリアル。
public static String formateDate(String dateString) {
Date date;
String formattedDate = "";
try {
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return formattedDate;
}
日付からの時間だけが必要な場合は、Stringの機能を使用できます。
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );
これにより、文字列の時間部分が自動的にカットされ、内に保存されますtimeString
。
新しいJava 8 Time APIを使用してレガシー をフォーマットする例を次に示しますjava.util.Date
。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
.withZone(ZoneOffset.UTC);
String utcFormatted = formatter.format(date.toInstant());
ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
// gives the same as above
ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
// 2011-12-03T10:15:30+01:00[Europe/Paris]
String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123
DateTimeFormatter
(とは異なりSimpleDateFormat
)スレッドセーフであるため、効率的にキャッシュできるのは素晴らしいことです。
クレジット:
LocalDateTimeで日付を解析/フォーマットする方法は?(Java 8)
これを試して、
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Date
{
public static void main(String[] args)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = "2013-05-14 17:07:21";
try
{
java.util.Date dt = sdf.parse(strDate);
System.out.println(sdf.format(dt));
}
catch (ParseException pe)
{
pe.printStackTrace();
}
}
}
出力:
2013-05-14 17:07:21
Javaでの日付と時刻のフォーマットの詳細については、以下のリンクを参照してください
public static void main(String[] args)
{
Date d = new Date();
SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
System.out.println(form.format(d));
String str = form.format(d); // or if you want to save it in String str
System.out.println(str); // and print after that
}
やってみよう
public static void main(String args[]) {
Calendar cal = GregorianCalendar.getInstance();
Date today = cal.getTime();
DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
String str7 = df7.format(today);
System.out.println("String in yyyy-MM-dd format is: " + str7);
} catch (Exception ex) {
ex.printStackTrace();
}
}
またはユーティリティ関数
public String convertDateToString(Date date, String format) {
String dateStr = null;
DateFormat df = new SimpleDateFormat(format);
try {
dateStr = df.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dateStr;
}
1行オプション
このオプションは、実際の日付を書き込むための簡単な1行を取得します。
これは
Calendar.class
andSimpleDateFormat
を使用しているため、Java8で使用するのは論理的ではないことに注意してください。
yourstringdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
java.util.Date
、java.util.Calendar
とjava.text.SimpleDateFormat
今のレガシーに取って代わられ、java.timeの Javaの8に、後に内蔵されたクラス。Oracleによるチュートリアルを参照してください。
2019-20-23 09:20:22
20か月ですか??)(2)答えが他の回答でまだカバーされていないものを提供していることがわかりません。(3)古くて悪名高い面倒なSimpleDateFormat
授業を若い人に教えないでください。少なくとも最初のオプションではありません。予約なしではありません。今日、私たちはjava.time
、最新のJava日時APIとそのを非常によく利用していますDateTimeFormatter
。