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

달력 날짜를 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형식의 형식이 필요 합니다.



답변

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"

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


답변

코드가 잘못되었습니다. 구문 분석 날짜가 없으며 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();
}


답변

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 형식을 사용합니다.


답변

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

String myString=format1.format(date);


답변

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

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

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


답변

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 일이 표시됩니다.


답변

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