web-dev-qa-db-ja.com

Javaで日付の24時間形式を設定するにはどうすればよいですか?

Androidこのコードを使用するアプリケーションを開発しています:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(d);

現在の時刻から8時間後に日付を取得する必要があり、この日付には24時間形式が必要ですが、SimpleDateFormatで日付を作成する方法がわかりません。日付がDD/MM/YYYY HH:MM:SS形式であることも必要です。

29
user1134602

これにより、24時間形式で日付が表示されます。

    Date date = new Date();
    date.setHours(date.getHours() + 8);
    System.out.println(date);
    SimpleDateFormat simpDate;
    simpDate = new SimpleDateFormat("kk:mm:ss");
    System.out.println(simpDate.format(date));
56
vikiiii

12時間形式の場合:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("hh:mm", Locale.UK);

24時間形式の場合:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("HH:mm", Locale.UK);
58
Tim Kruichkov
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d);

HHは、0〜23時間を返します。

kkは1時間から24時間を返します。

詳細はこちらをご覧ください: フォーマットのカスタマイズ

メソッドsetIs24HourView(Boolean is24HourView)を使用して、24時間表示を設定するタイムピッカーを設定します。

13
jeet

フォーマッタ文字列でhhの代わりにHHを使用します

7
Vikram

以下のコードを試してください

    String dateStr = "Jul 27, 2011 8:35:29 PM";
    DateFormat readFormat = new SimpleDateFormat( "MMM dd, yyyy hh:mm:ss aa");
    DateFormat writeFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
       date = readFormat.parse( dateStr );
    } catch ( ParseException e ) {
        e.printStackTrace();
    }

    String formattedDate = "";
    if( date != null ) {
    formattedDate = writeFormat.format( date );
    }

    System.out.println(formattedDate);

がんばろう!!!

さまざまな formats を確認します。

4
Fahim Parkar

tl; dr

最新のアプローチでは、Java.timeクラスを使用します。

Instant.now()                                        // Capture current moment in UTC.
       .truncatedTo( ChronoUnit.SECONDS )            // Lop off any fractional second.
       .plus( 8 , ChronoUnit.HOURS )                 // Add eight hours.
       .atZone( ZoneId.of( "America/Montreal" ) )    // Adjust from UTC to the wall-clock time used by the people of a certain region (a time zone). Returns a `ZonedDateTime` object.
       .format(                                      // Generate a `String` object representing textually the value of the `ZonedDateTime` object.
           DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
                            .withLocale( Locale.US ) // Specify a `Locale` to determine the human language and cultural norms used in localizing the text being generated. 
       )                                             // Returns a `String` object.

23/01/2017 15:34:56

Java.time

参考までに、古い Calendar および Date クラスは legacy です。 Java.time クラスによって置き換えられました。 Java.timeの多くは、Java 6、Java 7、およびAndroid(以下を参照)にバックポートされます。

Instant

InstantクラスでUTCの現在の瞬間をキャプチャします。

Instant instantNow = Instant.now();

instant.toString():2017-01-23T12:34:56.789Z

秒の小数部なしで、秒のみが必要な場合は、切り捨てます。

Instant instant = instantNow.truncatedTo( ChronoUnit.SECONDS );

instant.toString():2017-01-23T12:34:56Z

数学

Instantクラスは計算を行うことができ、時間を追加します。追加する時間を ChronoUnit enum、 TemporalUnit の実装で指定します。

instant = instant.plus( 8 , ChronoUnit.HOURS );

instant.toString():2017-01-23T20:34:56Z

ZonedDateTime

特定の地域の実時間のレンズを通して同じ瞬間を見るには、 ZoneId を適用して ZonedDateTime を取得します。

continent/regionAmerica/Montreal 、またはAfrica/CasablancaなどのPacific/Aucklandの形式で 適切なタイムゾーン名 を指定します。 ESTISTなどの3〜4文字の略語は、notの真のタイムゾーンであり、標準化されておらず、一意(!)でもないため使用しないでください。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString():2017-01-23T15:34:56-05:00 [アメリカ/モントリオール]

文字列を生成

DateTimeFormatterオブジェクトでフォーマットパターンを指定することにより、希望するフォーマットで文字列を生成できます。

大文字小文字の区別書式設定パターンの文字で。質問のコードには、Java.time.DateTimeFormatterの両方で大文字のhhが24時間(0-23)であるのに対して、12時間のHHがありますレガシーJava.text.SimpleDateFormatとして。

Java.timeのフォーマットコードは、従来のSimpleDateFormatのフォーマットコードと似ていますが、まったく同じではありません。クラスのドキュメントを注意深く学習します。ここで、HHは偶然同じように機能します。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ).withLocale( Locale.US );
String output = zdt.format( f );

自動ローカライズ

書式設定パターンをハードコーディングするのではなく、Java.timeDateTimeFormatter.ofLocalizedDateTime を呼び出してStringテキストの生成を完全にローカライズさせることを検討してください。

ちなみに、タイムゾーンとLocaleには何もしないが関係していることに注意してください。直交問題。 1つは、意味(実時間)contentについてです。もう1つはプレゼンテーションについてであり、その意味をユーザーに提示する際に使用される人間の言語と文化的規範を決定します。

Instant instant = Instant.parse( "2017-01-23T12:34:56Z" );
ZoneId z = ZoneId.of( "Pacific/Auckland" );  // Notice that time zone is unrelated to the `Locale` used in localizing.
ZonedDateTime zdt = instant.atZone( z );

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
                                       .withLocale( Locale.CANADA_FRENCH );  // The locale determines human language and cultural norms used in generating the text representing this date-time object.
String output = zdt.format( f );

instant.toString():2017-01-23T12:34:56Z

zdt.toString():2017-01-24T01:34:56 + 13:00 [太平洋/オークランド]

出力:mardi 24 janvier 2017à01:34:56 heureavancéede laNouvelle-Zélande


Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い legacy のような日時クラスに取って代わります Java.util.DateCalendar 、& SimpleDateFormat

Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。仕様は JSR 31 です。

Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列もJava.sql.*クラスも必要ありません。

Java.timeクラスはどこで入手できますか?


ジョーダタイム

更新: Joda-Time プロジェクトは メンテナンスモード になり、チームは Java.time クラスへの移行を推奨しています。

Joda-Time この種の作業をはるかに簡単にします。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime later = DateTime.now().plusHours( 8 );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd/MM/yyyy HH:mm:ss" );
String laterAsText = formatter.print( later );

System.out.println( "laterAsText: " + laterAsText );

実行すると…

laterAsText: 19/12/2013 02:50:18

この構文はデフォルトのタイムゾーンを使用することに注意してください。より良い方法は、明示的なDateTimeZoneインスタンスを使用することです。

2
Basil Bourque

次のようにできます:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy kk:mm:ss").format(d);

ここで「kk:mm:ss」は正しい答えです。私はOracleデータベースと混同しました、ごめんなさい。

0
xuanyuanzhiyuan

これを試して...

Calendar calendar = Calendar.getInstance();
String currentDate24Hrs = (String) DateFormat.format(
            "MM/dd/yyyy kk:mm:ss", calendar.getTime());
Log.i("DEBUG_TAG", "24Hrs format date: " + currentDate24Hrs);