Geçerli saati AM / PM ile 12 saatlik biçimde görüntüleme


184

Şu anda saat 13:35 PM olarak görüntüleniyor Ancak AM / PM ile 12 saatlik format olarak görüntülemek istiyorum, yani 13:35 PM yerine 13:35

Mevcut kod aşağıdaki gibidir

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

1
Yukarıdaki soru 2013 yılında ve 2014 yılında bahsettiğiniz bir soru sorulmuştur, bu yüzden yukarıdaki soru nasıl hızlı sorunun kopyasıdır, her iki soru da farklı teknolojiler için sorulmuştur
ronan

4
@ J-Dizzle Bir Java sorusu Swift sorusunun bir kopyası nasıl olabilir?
Mark Rotteveel

Özür dilerim, haklısın!
J-Dizzle

Yanıtlar:


452

Tarih desenini kullanarak almanın en kolay yolu - h:mm anerede

  • h - Saat / am (1-12)
  • m - Dakika olarak dakika
  • a - Öğleden önce / öğleden sonra işaretçisi

Kod snippet'i:

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

Belgeler hakkında daha fazla bilgi - SimpleDateFormat java 7


61
İki h ("ss") kullanmanın size önde gelen bir sıfır verdiğini unutmayın (örn. 01:23). Bir "h", başında sıfır olmadan saati verir (1:23 AM).
Ben Jakuben

9
'Am' & 'PM' yerine AM&PM Nasıl Gidilir?
Akash BS

@akashbs Sanırım kolay bir yol yok ama şöyle bir şey deneyebilirsiniz: tam tarih dizenizde, alt dizeyi (uzunluk - 4) 'den (uzunluk -1)' e çağırın ve bir değişken_orijinaline kaydedin ve sonra kullanacak yeni bir değişken_değiştirilmiş oluşturun ilk yaratılan variable_original ve 'm' cümledeki ".m", o zaman bu aradığınız şeyi başarmış olacağım (variable_modified, variable_original) değiştirin tam tarih dizisi ve çağrıya o döndükten sonra yöntem toUpperCase çağrı
Tamim Attafi

@akashbs Ama yerel halk kullanabilirsiniz, her yerel farklı tarih formatları kullanıyor, ABD yerel kullanmanın aradığınızı elde edebileceğine inanıyorum
Tamim Attafi

@akashbs Daha fazla bilgi için şu belgeleri kontrol edin: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

"hh:mm a"yerine kullanın "HH:mm a". Burada hh12 saatlik format ve HH24 saatlik format için.

Canlı Demo


Teşekkürler @RuchiraGayanRanaweei ... ben sadece 24 biçimini yakalamak ve AM / PM biçimine dönüştürmek merak ediyorum ...
gumuruh

Bu önemli. Sadece "2016-11-18T17: 28: 00" yerine "2016-11-18T05: 28: 00" yerine "18 Kasım 2016 17:28" biçimine dönüştürülmüş bir durumum vardı çünkü yanlış saat yer tutucusunu kullandım. Teşekkürler!
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);

Çıktı: 11-Eyl-13 12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h, AM / PM zamanları için kullanılır (1-12).

  • H, 24 saat boyunca kullanılır (1-24).

  • a AM / PM işaretleyicisidir

  • m, dakika cinsindendir

Not: İki saat önde gelen bir sıfır basacaktır: 01:13 PM. Bir saat baştaki sıfır olmadan yazdırılır: 13:13.

Görünüşe göre herkes beni zaten dövdü, ama ben araştırıyorum


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

Bu, burada bulduğum en iyi cevap, teşekkürler
Martin Volek

7

Java 8'i kullanma:

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

Çıktı AM/PMBiçimdedir.

Sample output:  3:00 PM

/ Text oluştururken kullanılacak insan dilini ve kültürel normları belirlemek için bu formatlayıcı nesnesini Localeçağırarak bir belirtin . withLocaleAMPM
Basil Bourque

5

Sadece aşağıdaki ifadeyi değiştirin ve işe yarayacaktır.

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

3

Android kullanımda AM, PM ile şimdiki zamanı istiyorsanız

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

Am, pm ile şimdiki saati istiyorsanız

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

VEYA

API düzey 26'dan

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

2
2019'da lütfen gençlere uzun süredir modası geçmiş ve meşhur zahmetli SimpleDateFormatsınıfı kullanmayı öğretmeyin . En azından ilk seçenek olarak değil. Ve herhangi bir rezervasyon olmadan. Bugün java.timemodern Java tarih ve saat API ve onun çok daha iyi var DateTimeFormatter.
Ole VV

1
Teşekkürler. Java.time'ın backport'u ThreeTenABP'yi Android projenize eklerseniz, modern yanıt düşük API seviyelerinde de kullanılabilir . Bkz Android Projesi ThreeTenABP nasıl kullanılır (bunun gibi basit bir görev için, değer tartışılır olabilir, ama sadece biraz daha tarih ve saat çalışma için bunu tavsiye).
Ole VV

AM ve PM İngilizce dışında başka dillerde çok az kullanıldığından, muhtemelen DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(veya İngilizce konuşan başka bir yerel ayar) kullanırım.
Ole VV

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

Bu tarih ve saati gösterecektir


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

Yol çok kıvrık ve sezgisel değil. Kullanımdan kaldırılmış SimpleDateFormat'ı kullanmanız gerekiyorsa, en azından her şeyi bir çağrıya koyun. Ayrıca, gece yarısından 1'e kadar gerçek saat yerine neden 12 kullandığınızı açıklayınız. Ayrıca, hiç kimse dosya adlarını sormadı.
Robert

2

tl; Dr.

JSR 310'un modern java.time sınıflarının, 12 saatlik sabit kodlama ve AM / PM yerine otomatik olarak yerelleştirilmiş metin oluşturmasına izin verin .

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

Otomatik olarak yerelleştir

AM / PM ile 12 saatlik bir saatte ısrar etmek yerine, java.time'ın sizin için otomatik olarak yerelleştirilmesine izin vermek isteyebilirsiniz . Arayın DateTimeFormatter.ofLocalizedTime.

Yerelleştirmek için şunları belirtin:

  • FormatStyle dizenin ne kadar uzun veya kısaltılmış olduğunu belirlemek için.
  • Locale belirlemek, birsey belirlemek:
    • İnsan dili günün adının çeviri, ayın adı ve böyle için.
    • Kültürel normlar kısaltması, harf, noktalama, ayırıcılar ve böyle konularını karar.

Burada belirli bir saat diliminde görüldüğü gibi günün saatini alıyoruz. Sonra o zamanı temsil etmek için metin üretiyoruz. Kanada kültüründe Fransızca, sonra ABD kültüründe İngilizce dilinde yerelleştiriyoruz.

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'da canlı olarak çalışan bu koda bakın .

10 sa 31

10:31


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

1
Cevabınızı biraz açıklarsanız daha yararlı olur.
Nima Derakhshanjan

("ss: dd: ss a") >>> Burada wedont kullanılırsa 24 saat görünecektir. Bu nedenle, zamanında AM / PM yapmak istiyorsak, bu biçimi eklemeniz yeterlidir. herhangi bir karışıklık varsa lütfen bana bildirin.
Raju Ahmed

0

Geçerli mobil tarih ve saat biçiminizi

9 Şub 2018 10:36:59

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

Eğer bunu gösterebilir Activity, Fragment, CardView, ListViewkullanarak herhangi bir yereTextView

` 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
Bir istisna yiyorsun. İstisna işleyici en azından bir uyarı vermelidir.
SL Barth - Monica

-2

Bunun için SimpleDateFormat kullanabilirsiniz.

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

Umarım bu size yardımcı olur.


1
Lütfen yeni bir cevap eklemeden önce diğer cevapları okuyun. Cevabınız temel olarak
bununla

6
Cevabınız ile ilk yorumumda bağladığım eski cevap arasındaki farkı açıklarsanız, cevabınız faydalı olabilir.
FelixSFD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.