AM / PM을 사용하여 12 시간 형식으로 현재 시간 표시


184

현재 시간이 표시 13시 35분 오후 그러나 내가 즉, AM / PM 12 시간 형식, 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
TrySimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");
Tarsem Singh

1
위의 질문은 2013 년과 2014 년에 언급 한 질문 중 하나이므로 위의 질문은 빠른 질문의 복제 방법입니다. 두 질문 모두 다른 기술에 대해 질문했습니다
ronan

4
@ J-Dizzle Java 질문은 어떻게 Swift 질문과 중복 될 수 있습니까?
Mark Rotteveel

내 사과, 당신은 정확합니다!
J-Dizzle

답변:


452

가장 쉬운 방법은 날짜 패턴을 사용하여 얻을 - h:mm a여기서,

  • h-오전 / 오후 시간 (1-12)
  • m-시간 분
  • a-오전 / 오후 마커

코드 스 니펫 :

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

설명서에 대한 자세한 내용-SimpleDateFormat java 7


61
두 개의 h ( "hh")를 사용하면 앞에 0이 표시됩니다 (예 : 오전 01:23). 하나의 "h"는 앞에 0이없는 시간을 제공합니다 (1:23 AM).
Ben Jakuben

9
'am'& 'p.m'대신 AM & PM을 얻는 방법
akash bs

@akashbs 쉬운 방법은 없다고 생각하지만 다음과 같이 시도 할 수 있습니다 : 전체 날짜 문자열에서 (길이-4)에서 (길이 -1)까지 하위 문자열을 호출하고 variable_original에 저장 한 다음 사용할 variable_modified를 새로 만듭니다. 첫 번째로 작성된 variable_original을 ".m"을 "m"으로 바꾼 다음 전체 날짜 문자열로 리턴 한 후 toUpperCase 메소드를 호출하고 replace (variable_original, variable_modified)를 호출하면 원하는 결과를 얻을 수 있습니다.
Tamim Attafi

@akashbs하지만, 각 지역의 용도를 다른 날짜 형식, 나는 당신이 너무 찾고있는 무엇을 달성 할 수있는 미국 현지을 사용하여 믿고 주민들을 사용할 수 있습니다
타밈 Attafi에게

@akashbs 자세한 정보는 다음 문서를 확인하십시오. developer.android.com/reference/java/text/SimpleDateFormat
Tamim Attafi


63

"hh:mm a"대신에 사용하십시오 "HH:mm a". 이곳까지 hh12 시간 형식과 HH24 시간 형식.

라이브 데모


감사합니다 @RuchiraGayanRanaweei ... 난 그냥 24 형식을 캡처하여 AM / PM 형식으로 변환 궁금합니다.
gumuruh

이건 중요하다. 방금 잘못된 자리 표시자를 사용했기 때문에 "2016-11-18T17 : 28 : 00"대신 "Nov 18 2016 5:28 PM"이 "2016-11-18T05 : 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-Sep-13 12.25.15.375 PM


17
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm:ss a");
  • h는 AM / PM 시간 (1-12)에 사용됩니다.

  • H는 24 시간 (1-24) 동안 사용됩니다.

  • a는 AM / PM 마커입니다

  • m은 시간 단위입니다

참고 : 두 h는 앞에 0을 표시합니다 (01:13 PM). 1 시간은 1시 13 분 앞에 0없이 인쇄됩니다.

기본적으로 모든 사람들이 이미 저를 때리는 것처럼 보이지만


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

물론, 이것은 최선의 대답은, 내가 여기 발견 덕분에
마틴 Volek

7

자바 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

를 지정 Locale호출하여 withLocale생성에 사용하기에 인간의 언어와 문화적 규범을 결정하기 위해, 그 포맷터 객체에 AM/의 PM텍스트를.
Basil Bourque

5

아래 진술을 바꾸면 작동합니다.

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

3

Android 에서 AM, PM의 현재 시간을 사용하려면

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 날짜 및 시간 API 와 그 기능 이 훨씬 뛰어납니다 DateTimeFormatter.
Ole VV

1
감사. java.time 의 백 포트 인 ThreeTenABP를 Android 프로젝트에 추가하면 최신 API를 낮은 API 레벨에서도 사용할 수 있습니다 . Android 프로젝트에서 ThreeTenABP를 사용하는 방법을 참조하십시오 (이와 같은 간단한 작업의 경우 값을 논의 할 수 있지만 약간 더 많은 날짜 및 시간 작업을 권장합니다).
Ole VV

AM과 PM은 영어 이외의 다른 언어에서는 거의 사용되지 않으므로 아마도 DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH)(또는 다른 영어권 언어)를 사용했을 것입니다 .
Ole VV

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

날짜와 시간이 표시됩니다


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을 사용해야하는 경우 최소한 한 번의 호출로 모든 것을 넣습니다. 또한 자정부터 1까지 실제 시간 대신 12를 사용하는 이유를 설명하십시오. 또한 파일 이름에 대해서는 아무도 묻지 않았습니다.
Robert

2

tl; dr

JSR 310 의 최신 java.time 클래스가 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:31

자동 현지화

AM / PM을 사용하여 12 시간 시계를 고집하지 않고 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:31


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

1
답변에 대해 조금 설명하면 더 유용합니다.
Nima Derakhshanjan

( "hh : mm : ss a") >>> 여기서 사용하지 않으면 24 시간이 나타납니다. 따라서 AM / PM을 원하는 경우이 형식을 추가하십시오. 혼란이 있으면 알려주세요.
Raju Ahmed

0

현재 모바일 날짜 및 시간 형식을 입력하려면

2018 년 2 월 9 일 오후 10:36:59

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 바스-복원 모니카

-2

이를 위해 SimpleDateFormat을 사용할 수 있습니다.

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

이것이 도움이되기를 바랍니다.


1
새 답변을 추가하기 전에 다른 답변을 읽으십시오. 당신의 대답은 기본적으로 이것과 동일합니다 : stackoverflow.com/a/18736764/4687348
FelixSFD

6
답변과 첫 번째 의견에서 연결했던 이전 답변의 차이점을 설명하려는 경우 답변이 유용 할 수 있습니다.
FelixSFD 17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.