JavaでJava.util.Date
オブジェクトをString
に変換したいです。
フォーマットは2010-05-30 22:15:52
です
DateFormat#format
メソッドを使用して、 Date を String に変換します。
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 it!
System.out.println("Today is: " + todayAsString);
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
Commons-lang DateFormatUtils (クラスパスにcommons-langがある場合)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
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
クラスは、 UTC のタイムライン上のモーメントを表し、分解能は ナノ秒 (小数点以下9桁まで)です。
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():2014-11-14T14:05:09 + 00:00
希望の形式の文字列を取得するには、 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
ところで、私はあなたが故意に offset-from-UTC やタイムゾーン情報を失うようなこの種のフォーマットをお勧めしません。その文字列の日時値の意味について曖昧さを作り出します。
また、Stringの日時値の表現では、小数秒が無視される(事実上切り捨てられる)ので、データの損失にも注意してください。
ある特定の地域の ウォールクロック時間 のレンズを通して同じ瞬間を見るには、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
などの厄介な古い日時クラスに代わるものです。
Joda-Time プロジェクトは、現在は メンテナンスモード になっており、Java.timeへの移行をお勧めします。
詳細については、 Oracle Tutorial を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。
Java.timeの機能の多くは ThreeTen-Backport でJava 6と7にバックポートされ、さらに ThreeTen-ABP の Android に適応しています( 使い方… )。
ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。
昔ながらの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);
これは Formatter と の相対インデックス の代わりにSimpleDateFormat
の代わりに を使用し、スレッドセーフではありません 、btw。
もう少し繰り返しですが、必要なステートメントは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
SimpleDateFormat を探しているようです。
フォーマット:yyyy-MM-dd kk:mm:ss
それを使用する最も簡単な方法は以下の通りです:
currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");
ここで、 "yyyy-MM-dd'T'HH:mm:ss"は閲覧日の形式です。
出力:2013年4月14日16時11分48秒(日)
注:HHとhhの対比 - HHは24時間形式を表します - hhは12時間形式を表します
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)
単発で;)
日付を取得する
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());
ハッピーコーディング:)
これを試して、
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での日付と時刻のフォーマットの詳細については、下記のリンクを参照してください。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = "2010-05-30 22:15:52";
Java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed
System.out.println(sdf.format(formatedDate)); // the use of format function returns a String
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);
これを試してみましょう
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;
}
From 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
}
OneLineオプション
このオプションは実際の日付を書くための簡単な一行を取得します。
注意してください、これは
Calendar.class
とSimpleDateFormat
を使っています、そしてそれはJava8の下でそれを使うのは論理的ではありません。
yourstringdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());