Wyświetl aktualny czas w formacie 12-godzinnym z AM / PM


184

Obecnie czas jest wyświetlany jako 13:35. Jednak chcę wyświetlać jako format 12-godzinny z AM / PM, tj. 13:35 zamiast 13:35

Aktualny kod jest jak poniżej

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
SpróbujSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh,

1
Powyższe pytanie zostało zadane w 2013 roku i to, o którym wspomniałeś w 2014 roku, więc w jaki sposób to powyższe pytanie jest duplikatem szybkiego pytania, a oba pytania zostały zadane w odniesieniu do różnych technologii
ronan

4
@ J-Dizzle Jak pytanie Java może być duplikatem pytania Swift?
Mark Rotteveel

Przepraszam, masz rację!
J-Dizzle

Odpowiedzi:


452

Najłatwiejszy sposób na uzyskanie tego za pomocą wzorca daty - h:mm agdzie

  • h - Godzina rano / po południu (1-12)
  • m - Minuta w godzinie
  • a - Znacznik Am / pm

Fragment kodu:

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

Przeczytaj więcej na temat dokumentacji - SimpleDateFormat java 7


61
Zauważ, że użycie dwóch h („hh”) daje wiodące zero (tj. 01:23 AM). Jedno „h” daje godzinę bez wiodącego zera (01:23).
Ben Jakuben,

9
Jak zdobyć AM&PM zamiast „am” i „
p.m

@akashbs Myślę, że nie ma łatwego sposobu na obejście tego problemu, ale możesz spróbować czegoś takiego: w swoim ciągu pełnej daty wywołaj podciąg z (długość - 4) do (długość -1) i zapisz go w zmiennej_oryginał, a następnie utwórz nową zmienną_modyfikowaną, która będzie używać pierwszy utworzony zmienna_oryginalna i zamienia „.m” na „m”, a następnie wywołuje metodę toUpperCase po tym powrocie do pełnego ciągu daty i wywołuje
funkcję replace (zmienna_oryginalna, zmienna_modyfikowana

@akashbs Ale możesz używać miejscowych, każdy lokalny używa różnych formatów dat, wierzę, że użycie lokalnego amerykańskiego może osiągnąć to, czego szukasz
Tamim Attafi

@akashbs Aby uzyskać więcej informacji, sprawdź te dokumenty: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

użyj "hh:mm a"zamiast "HH:mm a". Tutaj hhdla formatu 12-godzinnego i HH24-godzinnego.

Demo na żywo


Dzięki @RuchiraGayanRanaweei ... po prostu zastanawiam się, czy uchwycić format 24 i przekonwertować go na format AM / PM ...
gumuruh

To jest ważne. Właśnie miałem przypadek, w którym „18 listopada 2016 17:28” został przekonwertowany na „2016-11-18T05: 28: 00” zamiast „2016-11-18T17: 28: 00”, ponieważ użyłem niewłaściwego symbolu zastępczego godziny. Dzięki!
Kekzpanda

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

Wyjście: 11 września 13 13.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h stosuje się dla czasów AM / PM (1-12).

  • H stosuje się przez 24 godziny (1-24).

  • a jest znacznikiem AM / PM

  • m jest minuta za godzinę

Uwaga: Dwie godziny wydrukują wiodące zero: 13:13. Jedna godzina zostanie wydrukowana bez wiodącego zera: 13:13.

Wygląda na to, że wszyscy już mnie pobili, ale dygresuję


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

cóż, to najlepsza odpowiedź, jaką tu znalazłem, dzięki
Martin Volek

7

Za pomocą Java 8:

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

Dane wyjściowe są w AM/PMformacie.

Sample output:  3:00 PM

Określ a Locale, wywołując withLocaleten obiekt formatera, aby określić ludzki język i normy kulturowe, które mają być używane przy generowaniu AM/ PMtekstu.
Basil Bourque,

5

Wystarczy zamienić poniższe oświadczenie i będzie działać.

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

3

Jeśli chcesz aktualny czas z AM, PM w Android użytku

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

Jeśli chcesz aktualny czas z am, pm

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

LUB

Od poziomu API 26

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

2
W 2019 r. Nie ucz młodych, aby korzystali z dawno przestarzałej i notorycznie kłopotliwej SimpleDateFormatklasy. Przynajmniej nie jako pierwsza opcja. I nie bez zastrzeżeń. Dzisiaj mamy o wiele lepsze java.time, nowoczesne API daty i godziny Java oraz jego DateTimeFormatter.
Ole VV

1
Dzięki. Nowoczesnej odpowiedzi można także użyć na niskich poziomach API, jeśli dodasz ThreeTenABP , backport java.time, do swojego projektu na Androida. Zobacz Jak korzystać z ThreeTenABP w Android Project (w przypadku prostego zadania takiego jak to, wartość może być dyskusyjna, ale dla nieco większej ilości pracy z datą i czasem zalecam).
Ole VV

Ponieważ rano i po południu rzadko używa się innych języków niż angielski, prawdopodobnie użyłbym DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(lub innego języka anglojęzycznego).
Ole VV

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

Spowoduje to wyświetlenie daty i godziny


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

Zbyt zawiły i nieintuicyjny. Jeśli musisz użyć przestarzałego SimpleDateFormat, przynajmniej umieść wszystko w jednym wywołaniu. Wyjaśnij również, dlaczego używasz 12 zamiast faktycznej godziny od północy do 1. Ponadto nikt nie pytał o nazwy plików.
Robert

2

tl; dr

Pozwól nowoczesnym klasom JSR 310 na java.time automatycznie generować zlokalizowany tekst, a nie na sztywno 12-godzinny zegar i 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

Automatycznie zlokalizuj

Zamiast nalegać na 12-godzinny zegar z AM / PM, możesz pozwolić java.time automatycznie się dla ciebie zlokalizować. Zadzwoń DateTimeFormatter.ofLocalizedTime.

Aby zlokalizować, określ:

  • FormatStyle aby określić, jak długi lub skracany powinien być łańcuch.
  • Locale określić:
    • Język ludzki do tłumaczenia imienia, dnia i miesiąca.
    • Te normy kulturowe decydując kwestie skrót, kapitalizacji, interpunkcji, separatory, i takie.

Tutaj otrzymujemy aktualną porę dnia widoczną w określonej strefie czasowej. Następnie generujemy tekst reprezentujący ten czas. Lokalizujemy na język francuski w kulturze kanadyjskiej, a następnie język angielski w kulturze amerykańskiej.

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

Zobacz ten kod uruchamiany na żywo w IdeOne.com .

10 godz. 31

10:31


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

1
Jest to bardziej przydatne, jeśli wyjaśnisz trochę o swojej odpowiedzi.
Nima Derakhshanjan,

("hh: mm: ss a") >>> Tutaj, jeśli nie użyjesz, pojawią się godziny więc jeśli chcemy w czasie AM / PM po prostu dodać ten format. w razie jakichkolwiek wątpliwości daj mi znać.
Raju Ahmed,

0

Aby wprowadzić bieżący format daty i godziny telefonu komórkowego

9 lutego 2018 10:36:59 PM

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

można pokazać go do Activity, Fragment, CardView, ListViewnigdzie za pomocą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
Jadasz wyjątek. Moduł obsługi wyjątków powinien przynajmniej dostarczyć ostrzeżenie.
SL Barth - Przywróć Monikę

-2

Możesz do tego użyć SimpleDateFormat.

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

Mam nadzieję, że to ci pomoże.


1
Przeczytaj pozostałe odpowiedzi przed dodaniem nowej. Twoja odpowiedź jest w zasadzie taka sama jak ta: stackoverflow.com/a/18736764/4687348
FelixSFD

6
Twoja odpowiedź może być przydatna, jeśli wyjaśnisz różnicę między twoją odpowiedzią a starą, którą podałem w pierwszym komentarzu.
FelixSFD
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.