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
形式であることも必要です。
これにより、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));
12時間形式の場合:
SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("hh:mm", Locale.UK);
24時間形式の場合:
SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("HH:mm", Locale.UK);
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時間表示を設定するタイムピッカーを設定します。
フォーマッタ文字列でhhの代わりにHHを使用します
以下のコードを試してください
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 を確認します。
最新のアプローチでは、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
参考までに、古い 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/region
、 America/Montreal
、またはAfrica/Casablanca
などのPacific/Auckland
の形式で 適切なタイムゾーン名 を指定します。 EST
やIST
などの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.timeに DateTimeFormatter.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 8以降に組み込まれています。これらのクラスは、面倒な古い legacy のような日時クラスに取って代わります Java.util.Date
、 Calendar
、& 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インスタンスを使用することです。
次のようにできます:
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy kk:mm:ss").format(d);
ここで「kk:mm:ss」は正しい答えです。私はOracleデータベースと混同しました、ごめんなさい。
これを試して...
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);