web-dev-qa-db-ja.com

Java.util.Dateを文字列に変換する

JavaでJava.util.DateオブジェクトをStringに変換したいです。

フォーマットは2010-05-30 22:15:52です

381
novicePrgrmr

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

からhttp://www.kodejava.org/examples/86.html

729
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
208
Charlie Salts

Commons-lang DateFormatUtils (クラスパスにcommons-langがある場合)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
60
webpat

tl; dr

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.timeクラスを使用することです。

まずあなたのJava.util.DateInstantに変換します。 Instant クラスは、 UTC のタイムライン上のモーメントを表し、分解能は ナノ秒 (小数点以下9桁まで)です。

Java.timeとの変換は、古いクラスに追加された新しいメソッドによって行われます。

Instant instant = myUtilDate.toInstant();

あなたのJava.util.DateJava.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 [アメリカ/モントリオール]

フォーマットされた文字列を生成するには、上記と同じようにしますが、odtzdtに置き換えます。

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.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-ABPAndroid に適応しています( 使い方… )。

ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。

18
Basil Bourque

昔ながらの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つだけです。これは場合によっては便利かもしれません。

13
Vadzim

なぜあなたは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
9
dbow

SimpleDateFormat を探しているようです。

フォーマット:yyyy-MM-dd kk:mm:ss

7
pickypg

それを使用する最も簡単な方法は以下の通りです:

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時間形式を表します

4
Rami Sharaiyri
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;
}
4
Ashish Tiwari

日付からの時間だけが必要な場合は、単にStringの機能を使用できます。

Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );

これは文字列の時間部分を自動的にカットしてtimeStringの中に保存します。

4
funaquarius24

以下は新しい 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)

Java8 Java.util.DateからJava.time.ZonedDateTimeへの変換

インスタントを文字列にフォーマット

Java 8 ZonedDateTimeとOffsetDateTimeの違いは何ですか?

3
Vadzim

単発で;)

日付を取得する

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での日付と時刻のフォーマットの詳細については、下記のリンクを参照してください。

オラクルヘルプセンター

Javaにおける日付時刻の例

2
Shiva
    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
1
Dulith De Costa
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);
1
jujuBee

これを試してみましょう

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で日付を文字列に変換

1
David Pham
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
}
1
Artanis

OneLineオプション

このオプションは実際の日付を書くための簡単な一行を取得します。

注意してください、これはCalendar.classSimpleDateFormatを使っています、そしてそれはJava8の下でそれを使うのは論理的ではありません。

yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());