แสดงเวลาปัจจุบันในรูปแบบ 12 ชั่วโมงด้วย AM / PM


184

ขณะนี้เวลาที่แสดงเป็น13:35 PM อย่างไรก็ตามฉันต้องการแสดงเป็นรูปแบบ 12 ชั่วโมงด้วย AM / PM เช่น 1:35 PM แทนที่จะเป็น 13: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

1
คำถามข้างต้นถูกถามในปี 2556 และคำถามที่คุณพูดถึงในปี 2014 ดังนั้นคำถามข้างต้นนี้จะเป็นคำถามที่ซ้ำซ้อนของคำถามที่รวดเร็วได้อย่างไรและทั้งสองคำถามถูกถามถึงเทคโนโลยีที่แตกต่างกัน
Ronan

4
@ J-Dizzle คำถาม Java สามารถเป็นซ้ำได้อย่างไรกับคำถาม Swift
Mark Rotteveel

ฉันขอโทษคุณถูกต้อง!
J-Dizzle

คำตอบ:


452

วิธีที่ง่ายที่สุดในการรับสินค้าโดยใช้รูปแบบวันที่ - h:mm aที่ไหน

  • ชั่วโมง - ชั่วโมงในเวลา am / pm (1-12)
  • m - นาทีในชั่วโมง
  • a - Am / pm marker

ข้อมูลโค้ด:

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

อ่านเพิ่มเติมเกี่ยวกับเอกสาร - SimpleDateFormat java 7


61
โปรดทราบว่าการใช้สองชั่วโมง ("hh") จะทำให้คุณเป็นศูนย์นำ (เช่น 01:23 น.) หนึ่งชั่วโมง "" ให้คุณชั่วโมงโดยไม่มีศูนย์นำ (1:23 AM)
Ben Jakuben

9
วิธีรับ AM&PM แทนที่จะเป็น 'am' & 'p.m'
akash bs

@akashbs ฉันคิดว่าไม่มีวิธีง่ายๆ แต่คุณสามารถลองสิ่งต่อไปนี้: ในสตริงวันที่แบบเต็มของคุณเรียกสตริงย่อยจาก (ความยาว - 4) ถึง (ความยาว -1) และบันทึกไว้ใน variable_original แล้วสร้าง Vari_modified ใหม่ที่จะใช้ variable_original สร้างขึ้นครั้งแรกและแทนที่ ".m" กับ 'ม.' จากนั้นเรียกวิธี toUpperCase หลังจากกลับไปสตริงวันเต็มของคุณและโทรที่เข้ามาแทนที่ (variable_original, variable_modified) นี้จะบรรลุสิ่งที่คุณกำลังมองหา
มิม Attafi

@akashbs แต่คุณสามารถใช้คนในท้องถิ่นแต่ละท้องถิ่นใช้รูปแบบวันที่แตกต่างกันฉันเชื่อว่าการใช้สหรัฐอเมริกาในท้องถิ่นสามารถบรรลุสิ่งที่คุณกำลังมองหาได้เช่นกัน
Tamim Attafi

@akashbs สำหรับข้อมูลเพิ่มเติมตรวจสอบเอกสารเหล่านี้: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

ใช้แทน"hh:mm a" "HH:mm a"ที่นี่hhสำหรับรูปแบบ 12 ชั่วโมงและHHสำหรับรูปแบบ 24 ชั่วโมง

การสาธิตสด


ขอบคุณ @RuchiraGayanRanaweei ... ฉันแค่สงสัยในการจับภาพรูปแบบ 24 และแปลงเป็นรูปแบบ AM / PM และ ...
gumuruh

นี้เป็นสิ่งสำคัญ. ฉันเพิ่งมีกรณีที่ "18 พ.ย. 2016 5:28 PM" ถูกแปลงเป็น "2016-11-18T05: 28: 00" แทน "2016-11-18T17: 28: 00" เพราะฉันใช้ตัวยึดตำแหน่งผิดชั่วโมง ขอบคุณ!
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);

เอาต์พุต: 11 ก.ย. -13 12.25.15.375 น


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h ใช้สำหรับ AM / PM ครั้ง (1-12)

  • H ถูกใช้เป็นเวลา 24 ชั่วโมง (1-24)

  • a คือเครื่องหมาย AM / PM

  • m คือนาทีในชั่วโมง

หมายเหตุ: สองชั่วโมงจะพิมพ์ศูนย์นำหน้า: 01:13 PM หนึ่งชั่วโมงจะพิมพ์โดยไม่มีศูนย์นำ: 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

ระบุ a LocaleโดยการเรียกwithLocaleใช้ออบเจ็กต์ตัวจัดรูปแบบนั้นเพื่อกำหนดภาษามนุษย์และบรรทัดฐานทางวัฒนธรรมที่จะใช้ในการสร้างAM/ PMข้อความ
Basil Bourque

5

เพียงแค่แทนที่คำสั่งด้านล่างและมันจะทำงาน

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

3

หากคุณต้องการเวลาปัจจุบันด้วย AM, PM ในAndroidใช้

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 วันที่และเวลา APIDateTimeFormatterและ
Ole VV

1
ขอบคุณ คำตอบที่ทันสมัยสามารถใช้กับระดับ API ต่ำเช่นกันหากคุณเพิ่มThreeTenABPซึ่งเป็น backport ของ java.time ไปยังโครงการ Android ของคุณ ดูวิธีการใช้ ThreeTenABP ในโครงการ Android (สำหรับงานง่าย ๆ เช่นนี้ค่าอาจจะเป็นที่ถกเถียงกัน แต่สำหรับวันที่และเวลาเพียงเล็กน้อยที่ฉันแนะนำให้ทำ)
Ole VV

เนื่องจาก AM และ PM แทบจะไม่ได้ใช้ภาษาอื่นนอกจากภาษาอังกฤษฉันจึงอาจใช้DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(หรือภาษาอื่นที่พูดภาษาอังกฤษ)
Ole VV


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 ที่คัดค้านอย่างน้อยใส่ทุกอย่างไว้ในการโทรครั้งเดียว โปรดอธิบายด้วยว่าทำไมคุณถึงใช้ 12 แทนชั่วโมงจริงตั้งแต่เที่ยงคืนถึง 1 นอกจากนี้ยังไม่มีใครถามเกี่ยวกับชื่อไฟล์
Robert

2

TL; DR

ให้คลาสjava.time ที่ทันสมัยของ JSR 310 สร้างข้อความที่แปลเป็นภาษาท้องถิ่นโดยอัตโนมัติแทนการเข้ารหัสแบบ 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:30 น

แปลเป็นภาษาท้องถิ่นโดยอัตโนมัติ

แทนที่จะยืนยันเวลา 12 ชั่วโมงด้วย AM / PM คุณอาจต้องการให้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:30 น


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

1
มันมีประโยชน์มากกว่าถ้าคุณอธิบายเกี่ยวกับคำตอบของคุณเล็กน้อย
Nima Derakhshanjan

("hh: mm: ss a") >>> ที่นี่หากไม่ใช้ 24 ชั่วโมงจะปรากฏขึ้น ดังนั้นหากเราต้องการ AM / PM ในเวลาของคุณเพียงแค่เพิ่มรูปแบบนี้ หากมีความสับสนโปรดแจ้งให้เราทราบ
Raju Ahmed

0

เพื่อกำหนดรูปแบบวันที่และเวลาของอุปกรณ์เคลื่อนที่ในปัจจุบัน

9 ก.พ. , 2018 10:36:59 PM

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

คุณสามารถแสดงให้คุณActivity, Fragment, CardView, ListViewที่ใดก็ได้โดยใช้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 Barth - Reinstate Monica

-2

คุณสามารถใช้ SimpleDateFormat สำหรับสิ่งนี้

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

หวังว่านี่จะช่วยคุณได้


1
โปรดอ่านคำตอบอื่น ๆ ก่อนที่จะเพิ่มคำตอบใหม่ คำตอบของคุณนั้นตรงกับคำตอบนี้: stackoverflow.com/a/18736764/4687348
FelixSFD

6
คำตอบของคุณอาจมีประโยชน์ถ้าคุณจะอธิบายความแตกต่างระหว่างคำตอบของคุณกับคำตอบเก่าที่ฉันเชื่อมโยงไว้ในความคิดเห็นแรกของฉัน
FelixSFD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.