Joda-Time DateTime을 mm / dd / yyyy로만 포맷하는 방법은 무엇입니까?


189

문자열 " 11/15/2013 08:00:00" 이 있는데 " "로 형식을 지정하고 싶습니다 11/15/2013. 올바른 DateTimeFormatter패턴은 무엇입니까?

나는 많은 시도를했지만 여전히 올바른 패턴을 찾을 수 없습니다.

편집 : Java의 SimpleDateFormat이 아닌 Joda-Time을 찾고 있습니다 DateTimeFormatter.


2
tl; dr : DateTimeFormat.forPattern ( "MM / dd / yyyy HH : mm : ss"). print (DateTime.now ())
Andrew

답변:


386

조다 시간

DateTimeFormatter사용하여 만들기DateTimeFormat.forPattern(String)

Joda 시간을 사용하면 다음과 같이됩니다.

String dateTime = "11/15/2013 08:00:00";
// Format for input
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
DateTime jodatime = dtf.parseDateTime(dateTime);
// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM/dd/yyyy");
// Printing the date
System.out.println(dtfOut.print(jodatime));

표준 Java ≥ 8

Java 8에는 새로운 날짜 및 시간 라이브러리가 도입되어 날짜 및 시간 을보다 쉽게 ​​처리 할 수 ​​있습니다. 표준 Java 버전 8 이상을 사용하려면 DateTimeFormatter를 사용하십시오 . 에 시간대 String없으므로 java.time.LocalDateTime 또는 LocalDate입니다 . 그렇지 않으면 시간대가 지정된 ZonedDateTimeZonedDate를 사용할 수 있습니다.

// Format for input
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
// Parsing the date
LocalDate date = LocalDate.parse(dateTime, inputFormat);
// Format for output
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy");
// Printing the date
System.out.println(date.format(outputFormat));

표준 Java <8

Java 8 이전에는 SimpleDateFormatjava.util.Date를 사용했습니다.

String dateTime = "11/15/2013 08:00:00";
// Format for input
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Parsing the date
Date date7 = dateParser.parse(dateTime);
// Format for output
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
// Printing the date
System.out.println(dateFormatter.format(date7));

7
죄송하지만 jodatime의 DateTimeFormatter를 찾고 있습니다.
iCodeLikeImDrunk

1
@yaojiang Joda는와 같은 형식 문자열 구문을 사용 SimpleDateFormat합니다. API 설명서를 읽으십시오.
Jesper

@yaojiang Jesper가 언급했듯이 Joda는 더 많은 옵션이 있지만 동일한 형식 문자열을 사용합니다. Joda를 포함하도록 예제를 확장했습니다.
DeltaLima

이상하게도 DateTimeFormatter를 사용하고 있습니다. dtf = DateTimeFormat.forPattern ( "MM / dd / yyyy"); 그리고 난 아직도 "MM / DD / YYYY의 HH를 : MM : SS"좀 ..
iCodeLikeImDrunk

2
Joda-Time은 java.util.Date/Calendar와 매우 유사한 형식화 코드를 사용하지만 미묘한 차이점에 대해서는 문서를주의 깊게 읽으십시오. 그것들은 동일하지 않습니다.
Basil Bourque

45

다른 답변이 완전히 받아 들일지라도 여기에 이것을 추가하고 있습니다. JodaTime에는 DateTimeFormat에 사전 구문 분석기가 내장되어 있습니다.

dateTime.toString(DateTimeFormat.longDate());

다음은 대부분의 옵션이 해당 형식으로 인쇄 된 것입니다.

shortDate:         11/3/16
shortDateTime:     11/3/16 4:25 AM
mediumDate:        Nov 3, 2016
mediumDateTime:    Nov 3, 2016 4:25:35 AM
longDate:          November 3, 2016
longDateTime:      November 3, 2016 4:25:35 AM MDT
fullDate:          Thursday, November 3, 2016
fullDateTime:      Thursday, November 3, 2016 4:25:35 AM Mountain Daylight Time

1
이 버전이 어떤 버전으로 도입되었는지 잘 알고 있습니까? 바보 같은 형식 문자열을 생성하지 않음으로써 많은 시간을 절약 ...
iCodeLikeImDrunk

네, 전적으로 동의합니다. 항상 거기에 있었던 것 같습니다. joda-time.sourceforge.net/apidocs/org/joda/time/format/…
채드 빙햄

21
DateTime date = DateTime.now().withTimeAtStartOfDay();
date.toString("HH:mm:ss")

1
질문에 정확하게 대답하지는 않지만 유용합니다. 한 줄 버전 :DateTime.now().toString("HH:mm:ss")
hBrent

11

JodaTime을 사용하는 경우 이것이 효과가 있다고 생각합니다.

String strDateTime = "11/15/2013 08:00:00";
DateTime dateTime = DateTime.parse(strDateTime);
DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/YYYY");
String strDateOnly = fmt.print(dateTime);

나는 여기 에서 이것의 일부를 얻었다 .


문서에 대한 링크가 오래되었습니다. 올바른 URL은 다음과 같습니다. joda.org/joda-time/apidocs/org/joda/time/format/…
Basil Bourque

1
@BasilBourque 그 D날의 일임을 지적 해 주셔서 감사합니다 . 그러나 "문서 링크"가 오래되지 않았습니다. 연결된 문서 가 오래되었습니다. 나는 그 자체로 문서에 링크하지 않고, 코드가있는 페이지에 링크했다 – 구식 문서가되었다.
모자와 사람

10

나는 매우 멍청하지만 작업 옵션이 있습니다. 문자열이 있으면 fullDate = "11/15/2013 08:00:00";

   String finalDate = fullDate.split(" ")[0];

쉽고 빠르게 작동합니다. :)


네, 분명히 형식을 바꿀 것입니다. 이것은 작동하지만이 경우에만 작동합니다.
iCodeLikeImDrunk

1
실제로 행동을 예상하지 못한 후에, 당신의 코드를 본 사람 (여러분 포함)은 당신이 여기서 한
일을

3

업데이트 :

상수를 만들 수 있습니다.

private static final DateTimeFormatter DATE_FORMATTER_YYYY_MM_DD =
          DateTimeFormat.forPattern("yyyy-MM-dd"); // or whatever pattern that you need.

이 DateTimeFormat을 가져 오는 중 : (주의하십시오)

import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter;

다음과 같이 날짜를 구문 분석하십시오.

DateTime.parse(dateTimeScheduled.toString(), DATE_FORMATTER_YYYY_MM_DD);

이전 :
DateTime.parse ( "201711201515", DateTimeFormat.forPattern ( "yyyyMMddHHmm")). toString ( "yyyyMMdd");

날짜 시간을 원한다면 :

DateTime.parse("201711201515", DateTimeFormat.forPattern("yyyyMMddHHmm")).withTimeAtStartOfDay();

2

이 작동합니다

String x = "22/06/2012";
String y = "25/10/2014";

String datestart = x;
String datestop = y;

//DateTimeFormatter format = DateTimeFormat.forPattern("dd/mm/yyyy");
SimpleDateFormat  format = new SimpleDateFormat("dd/mm/yyyy");

Date d1 = null;
Date d2 = null;

try {
    d1 =  format.parse(datestart);
    d2 = format.parse(datestop);

    DateTime dt1 = new DateTime(d1);
    DateTime dt2 = new DateTime(d2);

    //Period
    period = new Period (dt1,dt2);

    //calculate days
    int days = Days.daysBetween(dt1, dt2).getDays();


} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

1

이를 수행하는 다른 방법은 다음과 같습니다.

String date = dateAndTime.substring(0, dateAndTime.indexOf(" "));

나는 확실하지 않지만, 이것이 .split()방법을 사용하는 것보다 빠르거나 메모리를 덜 사용한다고 생각합니다 .

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