Menampilkan waktu saat ini dalam format 12 jam dengan AM / PM

184

Saat ini waktu ditampilkan sebagai 13:35 PM Namun saya ingin menampilkan sebagai format 12 jam dengan AM / PM, yaitu 1:35 bukan 13:35

Kode saat ini adalah seperti di bawah ini

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";
}
ronan
sumber
7
CobaSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh
1
Pertanyaan di atas ditanyakan pada tahun 2013 tahun dan yang Anda sebutkan pada tahun 2014 jadi bagaimana pertanyaan di atas adalah duplikat dari pertanyaan cepat juga kedua pertanyaan itu diajukan untuk teknologi yang berbeda
ronan
4
@ J-Dizzle Bagaimana pertanyaan Java bisa menjadi duplikat dari pertanyaan Swift?
Mark Rotteveel
Doh, permintaan maaf saya, Anda benar!
J-Dizzle

Jawaban:

452

Cara termudah untuk mendapatkannya dengan menggunakan pola tanggal - h:mm a, di mana

  • h - Jam pagi / malam (1-12)
  • m - Menit dalam jam
  • a - Am / pm marker

Cuplikan kode:

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

Baca lebih lanjut tentang dokumentasi - SimpleDateFormat java 7

Subhrajyoti Majumder
sumber
61
Perhatikan bahwa menggunakan dua h ("hh") memberi Anda nol di depan (yaitu 01:23). Satu "h" memberi Anda waktu tanpa nol memimpin (01:23).
Ben Jakuben
9
Cara mendapatkan AM&PM alih-alih 'am' & 'p.m'
akash bs
@akashbs Saya pikir tidak ada jalan keluar yang mudah tetapi Anda dapat mencoba sesuatu seperti: di string tanggal lengkap Anda, panggil substring dari (length - 4) ke (length -1) dan simpan di variable_original kemudian buat variabel_modified baru yang akan menggunakan variabel_original yang pertama dibuat dan menggantikan ".m" dengan "m", kemudian panggil metode untukUpperCase setelah itu kembali ke string tanggal lengkap dan panggil ganti (variabel_original, variabel_modifikasi) ini akan mencapai apa yang Anda cari
Tamim Attafi
@akashbs Tetapi Anda dapat menggunakan penduduk setempat, masing-masing lokal menggunakan format tanggal yang berbeda, saya percaya menggunakan lokal AS dapat mencapai apa yang Anda cari juga
Tamim Attafi
@akashbs Untuk info lebih lanjut, periksa dokumen ini: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi
109

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

masukkan deskripsi gambar di sini

Java docs untuk SimpleDateFormat

Tarsem Singh
sumber
1
Sudah ketinggalan zaman. Kode pemformatan ini sekarang digantikan oleh kode pemformatan DateTimeFormatterkelas, per JSR 310.
Basil Bourque
63

gunakan "hh:mm a"sebagai ganti "HH:mm a". Di sini hhuntuk format 12 jam dan HHuntuk format 24 jam.

Demo Langsung

Ruchira Gayan Ranaweera
sumber
Terima kasih @RuchiraGayanRanaweei ... saya hanya ingin tahu untuk mengambil format 24 dan mengubahnya menjadi format AM / PM ...
gumuruh
Ini penting. Saya baru saja memiliki kasus di mana "18 Nov 2016 5:28 PM" dikonversi menjadi "2016-11-18T05: 28:00" bukan "2016-11-18T17: 28:00" karena saya menggunakan placeholder jam yang salah. Terima kasih!
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);

Output: 11-Sep-13 12.25.15.375 PM

MansoorShaikh
sumber
17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h digunakan untuk waktu AM / PM (1-12).

  • H digunakan selama 24 jam (1-24).

  • a adalah penanda AM / PM

  • m adalah menit dalam jam

Catatan: Two h's akan mencetak nol di depan: 01:13 PM. Satu jam akan dicetak tanpa nol di depan: 1:13 PM.

Sepertinya pada dasarnya semua orang sudah mengalahkan saya, tapi saya ngelantur

Johnny K
sumber
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())); 
Sucharith
sumber
baik, ini adalah jawaban terbaik yang saya temukan di sini, terima kasih
Martin Volek
7

Menggunakan Java 8:

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

Outputnya dalam AM/PMFormat.

Sample output:  3:00 PM
Bala
sumber
Tentukan Localedengan memanggil withLocaleobjek formatter itu, untuk menentukan bahasa manusia dan norma budaya yang akan digunakan dalam menghasilkan AM/ PMteks.
Basil Bourque
5

Cukup ganti pernyataan di bawah ini dan itu akan berhasil.

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

Jika Anda ingin waktu saat ini dengan AM, PM digunakan di Android

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

Jika Anda ingin waktu saat ini dengan pagi, sore

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

ATAU

Dari API level 26

LocalTime localTime = LocalTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm a");
String time = localTime.format(dateTimeFormatter);
Batas
sumber
2
Pada tahun 2019 tolong jangan mengajari anak-anak untuk menggunakan kelas yang sudah lama usang dan terkenal merepotkan SimpleDateFormat. Setidaknya bukan sebagai opsi pertama. Dan bukan tanpa reservasi apa pun. Hari ini kita memiliki jauh lebih baik java.time, API tanggal dan waktu Jawa modern dan DateTimeFormatter.
Ole VV
1
Terima kasih. Jawaban modern dapat digunakan pada level API rendah juga jika Anda menambahkan ThreeTenABP , backport java.time, ke proyek Android Anda. Lihat Cara menggunakan ThreeTenABP di Android Project (untuk tugas sederhana seperti ini, nilainya mungkin bisa diperdebatkan, tetapi untuk pekerjaan tanggal dan waktu yang sedikit lebih saya sarankan).
Ole VV
Karena AM dan PM hampir tidak digunakan dalam bahasa lain selain bahasa Inggris, saya mungkin akan menggunakan DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(atau lokal berbahasa Inggris lainnya).
Ole VV
2
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

Ini akan menampilkan tanggal dan waktu

gopal
sumber
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
alaguvel c
sumber
Terlalu berbelit-belit dan tidak intuitif. Jika Anda harus menggunakan SimpleDateFormat yang sudah tidak digunakan lagi, setidaknya masukkan semuanya dalam satu panggilan. Tolong juga jelaskan mengapa Anda menggunakan 12 bukannya jam sebenarnya dari tengah malam ke 1. Juga, tidak ada yang bertanya tentang nama file.
Robert
2

tl; dr

Biarkan kelas java.time modern JSR 310 secara otomatis menghasilkan teks yang dilokalkan, alih-alih mengkode jam 12-jam dan 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 pagi

Secara otomatis melokalkan

Daripada bersikeras pada jam 12 jam dengan AM / PM, Anda mungkin ingin membiarkan java.time secara otomatis melokalisasi untuk Anda. Panggil DateTimeFormatter.ofLocalizedTime.

Untuk melokalkan, tentukan:

  • FormatStyle untuk menentukan berapa lama atau disingkat seharusnya string.
  • Locale untuk menentukan:
    • Bahasa manusia untuk terjemahan nama hari, nama bulan, dan semacamnya.
    • The norma-norma budaya memutuskan isu-isu singkatan, kapitalisasi, tanda baca, pemisah, dan semacamnya.

Di sini kita mendapatkan waktu saat ini seperti yang terlihat di zona waktu tertentu. Kemudian kami menghasilkan teks untuk mewakili waktu itu. Kami melokalkan bahasa Prancis dalam budaya Kanada, lalu bahasa Inggris dalam budaya AS.

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

Lihat kode ini berjalan langsung di IdeOne.com .

10 jam 31

10:31 pagi

Basil Bourque
sumber
0
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a");
Raju Ahmed
sumber
1
Akan lebih bermanfaat jika Anda menjelaskan sedikit tentang jawaban Anda.
Nima Derakhshanjan
("hh: mm: ss a") >>> Di sini jika kita tidak menggunakan maka 24 jam akan muncul. jadi jika kami ingin AM / PM di waktu Anda, tambahkan saja format ini. jika ada kebingungan tolong beri tahu saya.
Raju Ahmed
0

Untuk memasukkan format tanggal dan waktu seluler Anda saat ini

9 Feb 2018 10:36:59 PM

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

Anda dapat menunjukkan kepada Anda Activity, Fragment, CardView, ListViewdi mana saja dengan menggunakanTextView

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

  `
abhishek jha
sumber
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) {}
   }
}
Manas Ranjan Mahapatra
sumber
3
Anda sedang makan pengecualian. Pawang Exception setidaknya harus memberikan peringatan.
SL Barth - Pasang kembali Monica
-2

Anda dapat menggunakan SimpleDateFormat untuk ini.

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

Semoga ini bisa membantu Anda.

Mayank Bhatnagar
sumber
1
Harap baca jawaban lain sebelum menambahkan yang baru. Jawaban Anda pada dasarnya sama dengan yang ini: stackoverflow.com/a/18736764/4687348
FelixSFD
6
Jawaban Anda bisa bermanfaat, jika Anda menjelaskan perbedaan antara jawaban Anda, dan yang lama saya tautkan dalam komentar pertama saya.
FelixSFD