Hiển thị thời gian hiện tại ở định dạng 12 giờ với AM / PM


184

Hiện tại thời gian hiển thị là 13:35 Tuy nhiên tôi muốn hiển thị ở định dạng 12 giờ với AM / PM, tức là 1:35 PM thay vì 13:35 PM

Mã hiện tại như dưới đây

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
Hãy thửSimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh

1
Câu hỏi trên đã được hỏi vào năm 2013 và câu hỏi mà bạn đã đề cập trong năm 2014, vậy câu hỏi trên có thể là bản sao của câu hỏi nhanh như thế nào, cả hai câu hỏi đều được hỏi cho các công nghệ khác nhau
ronan

4
@ J-Dizzle Làm thế nào một câu hỏi Java có thể là một bản sao của câu hỏi Swift?
Mark Rotteveel

Đừng xin lỗi tôi, bạn đã đúng!
J-Dizzle

Câu trả lời:


452

Cách dễ nhất để có được nó bằng cách sử dụng mẫu ngày - h:mm a, trong đó

  • h - Giờ vào sáng / chiều (1-12)
  • m - Phút trong giờ
  • a - Điểm đánh dấu sáng / chiều

Đoạn mã:

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

Đọc thêm về tài liệu - SimpleDateFormat java 7


61
Lưu ý rằng việc sử dụng hai h ("hh") sẽ mang lại cho bạn một số 0 đứng đầu (tức là 01:23 AM). Một "h" cung cấp cho bạn giờ mà không có số 0 đứng đầu (1:23 AM).
Ben Jakuben

9
Cách nhận AM & PM thay vì 'am' & 'p.m'
akash bs

@akashbs Tôi nghĩ rằng không có cách nào dễ dàng nhưng bạn có thể thử một cái gì đó như: trong chuỗi ngày đầy đủ của bạn, gọi chuỗi con từ (length - 4) đến (length -1) và lưu nó trong một biến_origen sau đó tạo một biến_modified mới sẽ sử dụng biến đầu tiên được tạo_origen và thay thế ".m" bằng "m", sau đó gọi phương thức toUpperCase sau khi quay lại chuỗi ngày đầy đủ của bạn và thay thế cuộc gọi (
biến_origen, biến_modified

@akashbs Nhưng bạn có thể sử dụng người địa phương, mỗi địa phương sử dụng các định dạng ngày khác nhau, tôi tin rằng sử dụng địa phương Hoa Kỳ có thể đạt được những gì bạn đang tìm kiếm
Tamim Attafi

@akashbs Để biết thêm thông tin, hãy kiểm tra các tài liệu này: developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

sử dụng "hh:mm a"thay vì "HH:mm a". Ở đây hhcho định dạng 12 giờ và HHcho định dạng 24 giờ.

Demo trực tiếp


Cảm ơn @RuchiraGayanRanaweei ... tôi chỉ tự hỏi để nắm bắt định dạng 24 và chuyển đổi nó sang định dạng AM / PM ...
gumuruh

Điều này quan trọng. Tôi vừa gặp trường hợp "18 tháng 11 năm 2016 5:28 PM" đã được chuyển đổi thành "2016-11-18T05: 28: 00" thay vì "2016-11-18T17: 28: 00" vì tôi đã sử dụng trình giữ chỗ sai giờ. Cảm ơn!
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);

Đầu ra: 11-tháng 9-2016 12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h được sử dụng cho thời gian AM / PM (1-12).

  • H được sử dụng trong 24 giờ (1-24).

  • a là điểm đánh dấu AM / PM

  • m là phút trong giờ

Lưu ý: Hai h sẽ in số 0 đứng đầu: 01:13 PM. Một h sẽ in mà không có số 0 đứng đầu: 1:13 PM.

Hình như về cơ bản mọi người đã đánh bại tôi với nó rồi, nhưng tôi lạc đề


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

tốt, đây là câu trả lời tốt nhất mà tôi tìm thấy ở đây, cảm ơn
Martin Volek

7

Sử dụng Java 8:

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

Đầu ra là ở AM/PMđịnh dạng.

Sample output:  3:00 PM

Chỉ định một Localebằng cách gọi withLocalevào đối tượng định dạng đó, để xác định ngôn ngữ và chuẩn mực văn hóa của con người sẽ sử dụng trong việc tạo AM/ PMvăn bản.
Basil Bourque

5

Chỉ cần thay thế tuyên bố dưới đây và nó sẽ làm việc.

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

3

Nếu bạn muốn thời gian hiện tại với AM, PM trong Android sử dụng

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

Nếu bạn muốn thời gian hiện tại với am, pm

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

HOẶC LÀ

Từ API cấp 26

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

2
Năm 2019, xin đừng dạy những người trẻ tuổi sử dụng SimpleDateFormatlớp học lỗi thời và nổi tiếng là rắc rối . Ít nhất không phải là lựa chọn đầu tiên. Và không phải không có bất kỳ đặt phòng. Ngày nay chúng ta có rất nhiều thứ tốt hơn java.time, API ngày và thời gian Java hiện đại và của nó DateTimeFormatter.
Ole VV

1
Cảm ơn. Câu trả lời hiện đại cũng có thể được sử dụng ở các cấp API thấp nếu bạn thêm ThreeTenABP , backport của java.time, vào dự án Android của bạn. Xem Cách sử dụng ThreeTenABP trong Dự án Android (đối với một tác vụ đơn giản như thế này, giá trị có thể gây tranh cãi, nhưng tôi chỉ khuyên bạn nên làm thêm một chút thời gian và thời gian.
Ole VV

Vì AM và PM hầu như không được sử dụng trong các ngôn ngữ khác ngoài tiếng Anh, nên tôi có thể sử dụng DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(hoặc một ngôn ngữ nói tiếng Anh khác).
Ole VV

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

Điều này sẽ hiển thị ngày và thời gian


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

Cách quá phức tạp và không trực quan. Nếu bạn phải sử dụng SimpleDateFormat không dùng nữa, ít nhất hãy đặt mọi thứ trong một cuộc gọi. Ngoài ra, vui lòng giải thích lý do tại sao bạn sử dụng 12 thay vì giờ thực tế từ nửa đêm đến 1. Ngoài ra, không ai hỏi về tên tệp.
Robert

2

tl; dr

Hãy để các lớp java.time hiện đại của JSR 310 tự động tạo văn bản cục bộ, thay vì đồng hồ 12 giờ và AM / PM mã hóa cứng.

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 sáng

Tự động bản địa hóa

Thay vì nhấn mạnh vào đồng hồ 12 giờ với AM / PM, bạn có thể muốn để java.time tự động bản địa hóa cho bạn. Gọi DateTimeFormatter.ofLocalizedTime.

Để bản địa hóa, chỉ định:

  • FormatStyle để xác định chuỗi dài hay viết tắt.
  • Locale để xác định:
    • Các ngôn ngữ loài người để dịch tên trong ngày, tên của tháng, và như vậy.
    • Các chuẩn mực văn hóa quyết định các vấn đề viết tắt, viết hoa, chấm câu, dấu phân cách, v.v.

Ở đây chúng ta có được thời gian hiện tại như đã thấy trong một múi giờ cụ thể. Sau đó, chúng tôi tạo ra văn bản để đại diện cho thời gian đó. Chúng tôi bản địa hóa ngôn ngữ Pháp trong văn hóa Canada, sau đó là ngôn ngữ tiếng Anh trong văn hóa Hoa Kỳ.

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

Xem này chạy trực tiếp tại IdeOne.com .

10 h 31

10:31 sáng


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

1
Sẽ hữu ích hơn nếu bạn giải thích một chút về câu trả lời của mình.
Nima Derakhshanjan

("hh: mm: ss a") >>> Ở đây nếu wedont sử dụng thì 24 giờ sẽ xuất hiện. Vì vậy, nếu chúng tôi muốn AM / PM trong thời gian của bạn chỉ cần thêm định dạng này. Nếu có sự nhầm lẫn xin vui lòng cho tôi biết.
Raju Ahmed

0

Để đặt định dạng ngày giờ di động hiện tại của bạn vào

Ngày 9 tháng 2 năm 2018 10:36:59

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

bạn có thể hiển thị nó cho bạn Activity, Fragment, CardView, ListViewbất cứ nơi nào bằng cách sử dụngTextView

` 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
Bạn đang ăn một ngoại lệ. Trình xử lý ngoại lệ ít nhất nên đưa ra cảnh báo.
SL Barth - Phục hồi Monica

-2

Bạn có thể sử dụng SimpleDateFormat cho việc này.

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

Hy vọng điều này sẽ giúp bạn.


1
Xin vui lòng đọc các câu trả lời khác trước khi thêm một câu trả lời mới. Câu trả lời của bạn về cơ bản giống như câu trả lời này: stackoverflow.com/a/18736764/4687348
FelixSFD

6
Câu trả lời của bạn có thể hữu ích, nếu bạn giải thích sự khác biệt giữa câu trả lời của bạn và câu trả lời cũ mà tôi đã liên kết trong nhận xét đầu tiên của mình.
FelixSFD
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.