Java로 달력 날짜를 yyyy-MM-dd 형식으로


210

달력 날짜를 yyyy-MM-dd형식 으로 변환하는 방법

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

이 생산 inActiveDate = Wed Sep 26 00:00:00 IST 2012합니다. 그러나 내가 필요한 것은 2012-09-26입니다. 내 목적은이 날짜를 최대 절전 모드 기준을 사용하여 데이터베이스의 다른 날짜와 비교하는 것입니다. 그래서 날짜 yyyy-MM-dd형식의 형식이 필요 합니다.


5
코드가 혼란 스럽습니다. 당신은 형식을하려고 Dateyyyy-MM-dd또는에서 문자열을 구문 분석 yyyy-MM-ddA와 Date값 ?? 날짜 형식을 지정하려면 format1.format(date)format1.parse(someStringValueInTheCorrectFormat)
간단히을

질문을 편집했습니다. 이전 실수로 죄송합니다.
Sarika.S

9
한 라이너 :( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp

답변:


342

Java Date는 1970 년 1 월 1 일 00:00:00 GMT 이후 밀리 초 단위의 컨테이너입니다.

와 같은 것을 사용할 때 System.out.println(date)Java는 Date.toString()내용을 인쇄하는 데 사용 합니다.

이를 변경하는 유일한 방법은 Date의 구현 을 재정의 하고 제공하는 것입니다 Date.toString(). 이제 IDE를 시작하고 시도하기 전에 나는하지 않을 것입니다. 문제 만 복잡하게 할뿐입니다. 날짜를 사용하거나 표시하려는 형식으로 지정하는 것이 좋습니다.

자바 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Java 8 이전

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

다음은 역사적 목적을 위해 유지됩니다 (원래 답변으로)

당신이 할 수있는 일은 날짜 형식입니다.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

이들은 실제로 동일한 날짜이며 다르게 표시됩니다.


1
종류의,하지만 훨씬 쉽다Calendar
MadProgrammer

1
어쨌든이 캘린더 객체에서 시간대를 완전히 제거 하시겠습니까?
Sarika.S

2
날짜 / 시간 조작에 대해 정말로 진지한 경우 Joda Time을 살펴보십시오. 다음과 같이 훨씬 쉬워집니다.Calendar
MadProgrammer

2
@ n13 질문이 데이터베이스 날짜 조작 또는 시간 조작에 관한 것이라면 나는 당신과 동의 할 것입니다. 문제는 특정 날짜 형식으로 날짜 값을 나타내는 방법이었습니다.
MadProgrammer

1
정교하게 구성된 답변-기본적으로 Model (Date) -View (Format) 분리입니다.
YoYo

19

코드가 잘못되었습니다. 구문 분석 날짜가 없으며 Date 객체로 유지하십시오.

캘린더 날짜 객체를 표시하고 문자열로 유지하려는 경우 캘린더 날짜 객체의 형식을 지정할 수 있습니다.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

13

java.time

MadProgrammer답변 , 특히 Joda-Time 에 대한 팁이 정확합니다 . Joda-Time의 후속 버전은 이제 새로운 java.time 패키지Java 8에 내장되어 있습니다. 다음은 Java 8의 코드 예제입니다.

현지 날짜와 달리 날짜 시간으로 작업 할 때는 시간대 가 중요합니다. 월은 시간대에 따라 다릅니다. 예를 들어, 인도 시간대+05:30(UTC보다 5 시간 30 분 앞선 반면) 프랑스 는 1 시간 앞서 있습니다. 따라서 인도의 새로운 하루의 순간에는 데이트가 있고 프랑스의 같은 순간에는 "어제의 날짜"가 있습니다. 시간대 나 오프셋 정보가없는 문자열 출력을 작성하면 모호성이 발생합니다. YYYY-MM-DD 출력을 요청하여 제공했지만 권장하지 않습니다. 대신 이 출력을 얻는 ISO_LOCAL_DATE데 사용했을 것입니다 ISO_DATE.2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

콘솔로 덤프…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

달릴 때…

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

조다 타임

java.time의 선구자 인 Joda-Time 라이브러리를 사용하는 유사한 코드 .

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

그건 그렇고, 입력 문자열의 형식은 ISO 8601에 의해 정의 된 몇 가지 편리한 날짜-시간 문자열 형식 중 하나 인 표준 형식 입니다.

Joda-Time 및 java.time은 다양한 날짜-시간 값의 문자열 표현을 구문 분석하고 생성 할 때 기본적으로 ISO 8601 형식을 사용합니다.


6

java.util.Date객체는 날짜사용자 정의 형식으로 나타낼 수 없으며 대신 SimpleDateFormat.format을 반환 하는 메소드 를 사용해야 합니다 string.

String myString=format1.format(date);

2

java.util.Date객체 를 파싱하려면 먼저 자신의 형식을 사용하여 객체를 문자열로 변환해야합니다.

inActiveDate = format1.parse(  format1.format(date)  );

그러나 나는 당신이 여기서 중복되고 있다고 생각합니다.


2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

JOption 창에 날짜 + 월, 일 및 연도 형식으로 7 일이 표시됩니다.


2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}

2
SO에 오신 것을 환영합니다. 코드 만 답변하면 Google 표준을 충족하지 않으므로 일부 상황 / 설명을 추가하십시오. 참조 stackoverflow.com/help/how-to-answer
우베 Allner

0

날짜가 데이터베이스의 날짜 필드와 비교되는 형식으로 비교되는이 코드를 찾았습니다 ... 이것이 도움이 될 수 있습니다 ...

simpledateformat을 사용하여 문자열을 날짜로 변환하면 mysql 데이터베이스의 Date 필드와 비교하기가 어렵습니다.

따라서이 형식으로 select STR_to_DATE ( 'yourdate', '% m / % d / % Y')->를 사용하여 Java 문자열 날짜를 형식으로 변환하면 mysql 날짜 필드의 정확한 날짜 형식을 얻을 수 있습니다.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/


3
링크 전용 답변은 링크 로트 및 기타 문제로 인해 StackOverflow에서 권장되지 않습니다. 요점과 함께 정보 요약을 제공 할 수 있습니까?
Basil Bourque

0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.