AM / PMで12時間形式で現在の時刻を表示する


184

現在時刻が表示されたとして午後1時35分PM しかし、私はすなわちAM / PM付き12時間形式、13:35の代わりに、午後1時35分PMとして表示します

現在のコードは以下の通りです

private static final int FOR_HOURS = 3600000;
private static final int FOR_MIN = 60000;
public String getTime(final Model model) {
    SimpleDateFormat formatDate = new SimpleDateFormat("HH:mm a");
    formatDate.setTimeZone(userContext.getUser().getTimeZone());
    model.addAttribute("userCurrentTime", formatDate.format(new Date()));
    final String offsetHours = String.format("%+03d:%02d", userContext.getUser().getTimeZone().getRawOffset()
    / FOR_HOURS, Math.abs(userContext.getUser().getTimeZone().getRawOffset() % FOR_HOURS / FOR_MIN));
    model.addAttribute("offsetHours",
                offsetHours + " " + userContext.getUser().getTimeZone().getDisplayName(Locale.ROOT));
    return "systemclock";
}

7
試してみるSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh 2013

1
上記の質問は2013年と2014年にあなたが言及した質問でしたので、この質問はどのようにすばやい質問の複製でもあります。また、両方の質問が異なるテクノロジーについて質問されました
ronan

4
@ J-Dizzle Javaの質問をSwiftの質問の複製にするにはどうすればよいですか?
Mark Rotteveel、

すみません、正解です。
J-

回答:


452

日付パターンを使用して取得する最も簡単な方法- h:mm a

  • h-午前/午後の時間(1〜12)
  • m-時間の分
  • a-午前/午後のマーカー

コードスニペット :

DateFormat dateFormat = new SimpleDateFormat("hh:mm a");

ドキュメントの詳細を読む-SimpleDateFormat Java 7


61
2つのh( "hh")を使用すると、先行ゼロ(つまり、01:23 AM)が与えられることに注意してください。1つの "h"は、先行ゼロなしの時間(1:23 AM)を示します。
Ben Jakuben 14

9
「午前」と「午後」の代わりにAM&PMを取得する方法
akash bs

@akashbs簡単な方法はないと思いますが、次のようなことを試すことができます:完全な日付文字列で、(長さ-4)から(長さ-1)までの部分文字列を呼び出し、それをvariable_originalに保存してから、使用する新しいvariable_modifiedを作成します最初に作成されたvariable_originalと ".m"を "m"で置き換え、完全な日付文字列に戻った後にメソッドtoUpperCaseを呼び出し、replace(variable_original、variable_modified)を呼び出します。これにより、探しているものが実現します
Tamim Attafi

@akashbsしかし、ローカルを使用できます。各ローカルは異なる日付形式を使用します。米国のローカルを使用しても、あなたが探しているものを達成できると思います
Tamim Attafi

@akashbs詳細については、次のドキュメントを確認してください:developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

"hh:mm a"代わりに使用してください"HH:mm a"。ここではhh、12時間形式とHH24時間形式について説明します。

ライブデモ


ありがとう@RuchiraGayanRanaweei ... 24形式をキャプチャしてAM / PM形式に変換したいと思っています...
gumuruh

これは重要。間違った時間のプレースホルダーを使用したため、「Nov 18 2016 5:28 PM」が「2016-11-18T17:28:00」ではなく「2016-11-18T05:28:00」に変換される場合がありました。ありがとう!
Kekzpanda 2018

20
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa");
String formattedDate = dateFormat.format(new Date()).toString();
System.out.println(formattedDate);

出力:2013年9月11日12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • hはAM / PM時間(1〜12)に使用されます。

  • Hは24時間(1〜24)使用されます。

  • aはAM / PMマーカーです

  • mは分単位の時間

注:2つのhは先行ゼロを印刷します:01:13 PM。1時間は先行ゼロなしで印刷されます:1:13 PM。

基本的に誰もがすでに私を倒したように見えますが、私は余談です


11
// hh:mm will print hours in 12hrs clock and mins (e.g. 02:30)
System.out.println(DateTimeFormatter.ofPattern("hh:mm").format(LocalTime.now()));

// HH:mm will print hours in 24hrs clock and mins (e.g. 14:30)
System.out.println(DateTimeFormatter.ofPattern("HH:mm").format(LocalTime.now())); 

// hh:mm a will print hours in 12hrs clock, mins and AM/PM (e.g. 02:30 PM)
System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(LocalTime.now())); 

さて、これは私がここで見つけた最良の答えです、ありがとう
Martin Volek

7

Java 8の使用:

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
System.out.println(localTime.format(dateTimeFormatter));

出力はAM/PMフォーマットです。

Sample output:  3:00 PM

/の生成に使用する人間の言語と文化的規範を決定するために、そのフォーマッターオブジェクトをLocale呼び出すwithLocaleことによってを指定します。AMPM
バジルブルク

5

以下のステートメントを置き換えるだけで動作します。

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");

3

AMで現在の時刻が必要な場合は、AndroidでPMを使用します

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime());

午前、午後の現在時刻が必要な場合

String time = new SimpleDateFormat("hh : mm a", Locale.getDefault()).format(Calendar.getInstance().getTime()).toLowerCase();

または

APIレベル26から

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);

2
2019年には、古くて悪名高い厄介なSimpleDateFormatクラスを使用するように若者に教えないでください。少なくとも最初の選択肢としてではない。予約なしではありません。今日、私たちはjava.time最新のJavaの日付と時刻のAPIとそのをはるかに上回っていますDateTimeFormatter
Ole VV

1
ありがとう。java.timeのバックポートであるThreeTenABPをAndroidプロジェクトに追加する、最新の回答を低いAPIレベルでも使用できます。AndroidプロジェクトでThreeTenABPを使用する方法を参照してください(このような単純なタスクの場合、値は議論の余地があるかもしれませんが、日付と時刻の作業が少し多い場合はお勧めします)。
Ole VV

AMとPMは英語以外の言語ではほとんど使用されないため、おそらくDateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(または別の英語を話すロケール)を使用します。
Ole VV

2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

日付と時刻が表示されます


2
    //To get Filename + date and time


    SimpleDateFormat f = new SimpleDateFormat("MMM");
    SimpleDateFormat f1 = new SimpleDateFormat("dd");
    SimpleDateFormat f2 = new SimpleDateFormat("a");

    int h;
         if(Calendar.getInstance().get(Calendar.HOUR)==0)
            h=12;
         else
            h=Calendar.getInstance().get(Calendar.HOUR)

    String filename="TestReport"+f1.format(new Date())+f.format(new Date())+h+f2.format(new Date())+".txt";


The Output Like:TestReport27Apr3PM.txt

あまりにも複雑で直感的ではありません。非推奨のSimpleDateFormatを使用する必要がある場合は、少なくとも1回の呼び出しですべてを入れてください。また、午前0時から1時までの実際の時間の代わりに12を使用する理由を説明してください。また、誰もファイル名について質問していません。
Robert

2

tl; dr

JSR 310 の最新のjava.timeクラスで、12時間クロックとAM / PMをハードコーディングするのではなく、ローカライズされたテキストを自動的に生成します。

LocalTime                                     // Represent a time-of-day, without date, without time zone or offset-from-UTC.
.now(                                         // Capture the current time-of-day as seen in a particular time zone.
    ZoneId.of( "Africa/Casablanca" )          
)                                             // Returns a `LocalTime` object.
.format(                                      // Generate text representing the value in our `LocalTime` object.
    DateTimeFormatter                         // Class responsible for generating text representing the value of a java.time object.
    .ofLocalizedTime(                         // Automatically localize the text being generated.
        FormatStyle.SHORT                     // Specify how long or abbreviated the generated text should be.
    )                                         // Returns a `DateTimeFormatter` object.
    .withLocale( Locale.US )                  // Specifies a particular locale for the `DateTimeFormatter` rather than rely on the JVM’s current default locale. Returns another separate `DateTimeFormatter` object rather than altering the first, per immutable objects pattern.
)                                             // Returns a `String` object.

午前10時31分

自動的にローカライズ

AM / PMで12時間制を主張するのではなく、java.timeが自動的にローカライズするようにすることができます。を呼び出しDateTimeFormatter.ofLocalizedTimeます。

ローカライズするには、次のように指定します。

  • FormatStyle 文字列の長さまたは省略形を決定します。
  • Locale 決定する:
    • 日の名前、月の名前などを翻訳するための人間の言語
    • 文化的規範略語、大文字と小文字、句読点、セパレータ、および、そのようなの問題を決定します。

ここでは、特定のタイムゾーンで見られる現在の時刻を取得します。次に、その時間を表すテキストを生成します。カナダの文化ではフランス語にローカライズし、アメリカの文化では英語にローカライズします。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalTime localTime = LocalTime.now( z ) ;

// Québec
Locale locale_fr_CA = Locale.CANADA_FRENCH ;  // Or `Locale.US`, and so on.
DateTimeFormatter formatterQuébec = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_fr_CA ) ;
String outputQuébec = localTime.format( formatterQuébec ) ;

System.out.println( outputQuébec ) ;

// US
Locale locale_en_US = Locale.US ;  
DateTimeFormatter formatterUS = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_en_US ) ;
String outputUS = localTime.format( formatterUS ) ;

System.out.println( outputUS ) ;

IdeOne.comでこのコードがライブで実行されることを確認してください

10時間31

午前10時31分


0
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");

1
あなたの答えについて少し説明するともっと役に立ちます。
Nima Derakhshanjan

( "hh:mm:ss a")>>>ここで、thenを使用しない場合、24時間が表示されます。したがって、時間内にAM / PMを使用する場合は、この形式を追加してください。混乱があれば教えてください。
Raju Ahmed

0

現在のモバイルの日付と時刻の形式を

2018年2月9日午後10:36:59

Date date = new Date();
 String stringDate = DateFormat.getDateTimeInstance().format(date);

あなたにそれを表示することができActivityFragmentCardViewListViewどこでも使用することにより、TextView

` TextView mDateTime;

  mDateTime=findViewById(R.id.Your_TextViewId_Of_XML);

  Date date = new Date();
  String mStringDate = DateFormat.getDateTimeInstance().format(date);
  mDateTime.setText("My Device Current Date and Time is:"+date);

  `

0
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;

public class Main {
   public static void main(String [] args){
       try {
            DateFormat parseFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm a");
            String sDate = "22-01-2019 13:35 PM";
            Date date = parseFormat.parse(sDate);
            SimpleDateFormat displayFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
            sDate = displayFormat.format(date);
            System.out.println("The required format : " + sDate);
        } catch (Exception e) {}
   }
}

3
あなたは例外を食べています。例外ハンドラは少なくとも警告を提供する必要があります。
SLバース-モニカを

-2

これにはSimpleDateFormatを使用できます。

SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");

これがお役に立てば幸いです。


1
新しい回答を追加する前に、他の回答をお読みください。あなたの答えは基本的にこれと同じです:stackoverflow.com/a/18736764/4687348
FelixSFD

6
あなたの回答と、最初のコメントでリンクした古い回答との違いを説明するのであれば、あなたの回答は役に立ちます。
FelixSFD 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.