java.util.Date 형식 변환 yyyy-mm-dd에서 mm-dd-yyyy로


88

나는 java.util.Date형식이 yyyy-mm-dd있습니다. 나는 그것을 형식으로 원한다mm-dd-yyyy

다음은이 변환을 위해 시도한 샘플 유틸리티입니다.

// Setting the pattern
SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy");
// myDate is the java.util.Date in yyyy-mm-dd format
// Converting it into String using formatter
String strDate = sm.format(myDate);
//Converting the String back to java.util.Date
Date dt = sm.parse(strDate);

여전히 내가 얻는 출력은 형식이 아닙니다 mm-dd-yyyy.

java.util.Datefrom yyyy-mm-ddto 형식을 지정하는 방법을 알려주세요.mm-dd-yyyy


2
.. yyyy-mm-dd 형식의 java.util.Date가 있다는 것은 무슨 의미입니까?
Jayamohan

내 코드에서 UI에 표시하기위한 현재 형식은 yyyy-mm-dd.
user182944 aug

1
작은 mm을 MM으로 변경하십시오
Dilip D

답변:


157

Date Unix 시대 (1970 년 1 월 1 일 00:00:00 UTC) 이후의 밀리 초 수를 나타내는 컨테이너입니다.

형식에 대한 개념이 없습니다.

자바 8 이상

LocalDateTime ldt = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt));
System.out.println(ldt);

출력 ...

05-11-2018
2018-05-11
2018-05-11T17:24:42.980

자바 7-

당신은 사용하게해야한다 ThreeTen 백 포트를

원래 답변

예를 들면 ...

Date myDate = new Date();
System.out.println(myDate);
System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate));
System.out.println(myDate);

출력 ...

Wed Aug 28 16:20:39 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 16:20:39 EST 2013

어떤 형식도 기본 Date값 을 변경하지 않았습니다 . 이것은 DateFormatters 의 목적입니다

추가 예제로 업데이트 됨

첫 번째 예가 이해가되지 않는 경우를 대비하여 ...

이 예에서는 두 개의 포맷터를 사용하여 동일한 날짜를 포맷합니다. 그런 다음 동일한 포맷터를 사용하여 String값을 Dates로 다시 구문 분석합니다 . 결과 구문 분석은 Date값을보고 하는 방식을 변경하지 않습니다 .

Date#toString내용의 덤프 일뿐입니다. 이것을 변경할 수는 없지만 Date원하는 방식으로 개체의 서식을 지정할 수 있습니다.

try {
    Date myDate = new Date();
    System.out.println(myDate);

    SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy");
    SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd");

    // Format the date to Strings
    String mdy = mdyFormat.format(myDate);
    String dmy = dmyFormat.format(myDate);

    // Results...
    System.out.println(mdy);
    System.out.println(dmy);
    // Parse the Strings back to dates
    // Note, the formats don't "stick" with the Date value
    System.out.println(mdyFormat.parse(mdy));
    System.out.println(dmyFormat.parse(dmy));
} catch (ParseException exp) {
    exp.printStackTrace();
}

어떤 출력이 ...

Wed Aug 28 16:24:54 EST 2013
08-28-2013
2013-08-28
Wed Aug 28 00:00:00 EST 2013
Wed Aug 28 00:00:00 EST 2013

또한 형식 패턴에주의하십시오. SimpleDateFormat잘못된 패턴을 사용하고 있지 않은지 자세히 살펴보십시오 .)


훌륭한 대답이 나를 도왔습니다. 명령 줄 샘플 앱을 실행하여 형식을 테스트하려고했습니다 (Android 클래스에서 사용하기 전에)-필요한 가져 오기를 찾을 수 없습니다. 제공된 답변 중 다음을 포함하는 것을 기억하지 않습니다. import java.text.SimpleDateFormat;
raddevus

34
SimpleDateFormat("MM-dd-yyyy");

대신에

SimpleDateFormat("mm-dd-yyyy");

왜냐하면 MM points Month,mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
String strDate = sm.format(myDate);

이 변경 사항 외에도 위의 util 메서드에서 수행해야하는 다른 변경 사항이 있습니까? 나는 그것을 즉시 테스트 할 수 없으므로 이것을 묻습니다. 또한 형식을 지정하는 더 좋은 방법이 java.util.Date있습니까?
user182944 aug

15

'M'(대문자)은 월을 나타내고 'm'(단순)은 분을 나타냅니다.

몇 달 동안의 몇 가지 예

'M' -> 7  (without prefix 0 if it is single digit)
'M' -> 12

'MM' -> 07 (with prefix 0 if it is single digit)
'MM' -> 12

'MMM' -> Jul (display with 3 character)

'MMMM' -> December (display with full name)

몇 분의 예

'm' -> 3  (without prefix 0 if it is single digit)
'm' -> 19
'mm' -> 03 (with prefix 0 if it is single digit)
'mm' -> 19

3

tl; dr

LocalDate.parse( 
    "01-23-2017" , 
    DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)

세부

yyyy-mm-dd 형식의 java.util.Date가 있습니다.

다른 언급과 같이 Date클래스에는 형식이 없습니다. 1970 년이 시작된 이후 UTC로 밀리 초를 계산합니다. 첨부 된 문자열이 없습니다.

java.time

다른 Answers는 이제 java.time 클래스로 대체 된 귀찮은 오래된 레거시 날짜-시간 클래스를 사용합니다.

가있는 경우 객체 java.util.Date로 변환하십시오 Instant. 이 Instant클래스는 나노초 단위 (소수점의 최대 9 자리) 의 해상도로 타임 라인의 한 순간을 UTC 로 나타냅니다 .

Instant instant = myUtilDate.toInstant();

시간대

다른 답변은 시간대의 중요한 문제를 무시합니다. 날짜를 결정하려면 시간대가 필요합니다. 주어진 순간에 날짜는 지역별로 전 세계적으로 다릅니다. 파리의 자정 이후 몇 분이 지나면 프랑스는 새로운 날이지만 몬트리올 퀘벡에서는 여전히 "어제"입니다.

.NET Framework에 대한 컨텍스트를 원하는 시간대를 정의하십시오 Instant.

ZoneId z = ZoneId.of( "America/Montreal" );

적용 ZoneId을 얻을 ZonedDateTime.

ZonedDateTime zdt = instant.atZone( z );

LocalDate

시간없이 날짜에만 관심이 있다면 LocalDate.

LocalDate localDate = zdt.toLocalDate();

표준 ISO 8601 형식 인 YYYY-MM-DD로 문자열을 생성하려면 toString. java.time 클래스는 문자열을 생성 / 파싱 할 때 기본적으로 표준 형식을 사용합니다.

String output = localDate.toString();

2017-01-23

MM-DD-YYYY 형식을 원하는 경우 형식화 패턴을 정의하십시오.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );

형식화 패턴 코드는 대소 문자를 구분합니다. 질문의 코드 mmMM(월 )이 아닌 잘못 사용되었습니다 (분 ).

DateTimeFormatter구문 분석에 동일한 개체를 사용합니다 . java.time 클래스는 스레드로부터 안전하므로이 객체를 유지하고 스레드간에 반복적으로 재사용 할 수 있습니다.

LocalDate localDate = LocalDate.parse( "01-23-2017" , f );

java.time 정보

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


1

코드 아래에서 간단하게 사용할 수 있습니다.

final Date todayDate = new Date();

System.out.println(todayDate);

System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate));

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate));

System.out.println(todayDate);

(A)이 코드는 시간대의 중요한 문제를 무시합니다. (B)이 코드는 수년 동안 레거시가 되어온 귀찮은 오래된 날짜-시간 클래스를 사용합니다. 그들을 피하십시오. java.time 클래스로 대체됩니다.
Basil Bourque

1

일, 월, 연도를 가져 와서 연결하거나 아래에 주어진 MM-dd-yyyy 형식을 사용할 수 있습니다.

Date date1 = new Date();
String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1);
System.out.println("Formatted Date 1: " + mmddyyyy1);



Date date2 = new Date();
Calendar calendar1 = new GregorianCalendar();
calendar1.setTime(date2);
int day1   = calendar1.get(Calendar.DAY_OF_MONTH);
int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11}
int year1  = calendar1.get(Calendar.YEAR);
String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1);
System.out.println("Formatted Date 2: " + mmddyyyy2);



LocalDateTime ldt1 = LocalDateTime.now();  
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy");  
String mmddyyyy3 = ldt1.format(format1);  
System.out.println("Formatted Date 3: " + mmddyyyy3);  



LocalDateTime ldt2 = LocalDateTime.now();
int day2 = ldt2.getDayOfMonth();
int mont2= ldt2.getMonthValue();
int year2= ldt2.getYear();
String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2);
System.out.println("Formatted Date 4: " + mmddyyyy4);



LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy");  
String mmddyyyy5 = ldt3.format(format2);   
System.out.println("Formatted Date 5: " + mmddyyyy5); 



Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(new Date());
int day3  = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE
int month3= calendar2.get(Calendar.MONTH) + 1;
int year3 = calendar2.get(Calendar.YEAR);
String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3);
System.out.println("Formatted Date 6: " + mmddyyyy6);



Date date3 = new Date();
LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd
int day4  = ld1.getDayOfMonth();
int month4= ld1.getMonthValue();
int year4 = ld1.getYear();
String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4);
System.out.println("Formatted Date 7: " + mmddyyyy7);



Date date4 = new Date();
int day5   = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth();
int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue();
int year5  = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear();
String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5);
System.out.println("Formatted Date 8: " + mmddyyyy8);



Date date5 = new Date();
int day6   = Integer.parseInt(new SimpleDateFormat("dd").format(date5));
int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5));
int year6  = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5));
String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here`
System.out.println("Formatted Date 9: " + mmddyyyy9);

1

작은 "mm"월을 대문자 "MM"으로 변경하십시오. 아래는 샘플 코드입니다.

        Date myDate = new Date();
        SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy");
       
        String strDate = sm.format(myDate);
        
        Date dt = sm.parse(strDate);
        System.out.println(strDate);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.