[java] java.util.Date를 문자열로 변환

Java 로 java.util.Date객체 를 변환하고 싶습니다 String.

형식은 2010-05-30 22:15:52



답변

메소드를 사용하여 날짜문자열로 변환하십시오 DateFormat#format.

String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);

// Print the result!
System.out.println("Today is: " + todayAsString);

에서 http://www.kodejava.org/examples/86.html


답변

Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);


답변

Commons-lang DateFormatUtils장점 으로 가득합니다 (클래스 패스에 commons-lang이있는 경우)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");


답변

tl; dr

myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
          .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
          .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
          .replace( "T" , " " )  // Put a SPACE in the middle.

2014-11-14 14:05:09

java.time

현대적인 방법은 이제 번거롭고 오래된 레거시 날짜-시간 클래스를 대체하는 java.time 클래스를 사용하는 것입니다.

먼저 변환 java.util.DateInstant. 이 Instant클래스는 나노초 의 해상도 (소수점의 최대 9 자리)로 UTC 의 타임 라인에서 순간을 나타냅니다 .

java.time과의 변환은 이전 클래스에 추가 된 새로운 메소드에 의해 수행됩니다.

Instant instant = myUtilDate.toInstant();

모두 당신 java.util.Datejava.time.Instant에있는 UTC . 날짜와 시간을 UTC로보고 싶다면 그렇게하십시오. toString표준 ISO 8601 형식으로 문자열을 생성하기 위해 호출 합니다.

String output = instant.toString();  

2014-11-14T14 : 05 : 09Z

다른 형식의 Instant경우보다 유연한 형식으로 변환해야합니다 OffsetDateTime.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

odt.toString () : 2020-05-01T21 : 25 : 35.957Z

해당 코드가 IdeOne.com에서 실시간으로 실행되는지 확인하십시오 .

원하는 형식으로 문자열을 얻으려면을 지정하십시오 DateTimeFormatter. 사용자 정의 형식을 지정할 수 있습니다. 그러나 미리 정의 된 포맷터 ( ISO_LOCAL_DATE_TIME) 중 하나를 사용 T하고 출력에서 ​​SPACE를 바꿉니다.

String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

그건 그렇고 나는 당신이 의도적으로 UTC에서 오프셋 또는 시간대 정보를 잃는 이러한 종류의 형식을 권장하지 않습니다 . 해당 문자열의 날짜-시간 값의 의미에 대해 모호성을 만듭니다.

또한 문자열의 날짜-시간 값 표현에서 분수 초가 무시 (효과적으로 잘림)되므로 데이터 손실에주의하십시오.

특정 지역의 벽시계 시간 의 렌즈를 통해 같은 순간을 보려면을 적용하여을 ZoneId얻습니다 ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString () : 2014-11-14T14 : 05 : 09-05 : 00 [미국 / 몬트리올]

포맷 문자열을 생성하려면 위와 같이 동일한 작업을 수행하지만 교체 odt와 함께 zdt.

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

이 코드를 매우 많이 실행하는 경우 조금 더 효율적이고을 호출하지 않아도됩니다 String::replace. 해당 호출을 삭제하면 코드가 짧아집니다. 원하는 경우 자신의 DateTimeFormatter개체 에 고유 한 서식 패턴을 지정하십시오 . 이 인스턴스를 재사용을 위해 상수 또는 멤버로 캐시하십시오.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.

인스턴스를 전달하여 해당 포맷터를 적용하십시오.

String output = zdt.format( f );

java.time에 대하여

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이러한 클래스는 같은 귀찮은 된 날짜 – 시간의 수업을 대신하는 java.util.Date, .Calendar, java.text.SimpleDateFormat.

Joda 타임 프로젝트는 현재의 유지 관리 모드 , java.time로 마이그레이션을 조언한다.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오.

많은 java.time 기능은 자바 6 & 7 백 포팅 ThreeTen – 백 포트 추가에 적응 안드로이드ThreeTenABP (참조 … 사용 방법 ).

ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다.


답변

평범한 자바의 대체 1 라이너 :

String.format("The date: %tY-%tm-%td", date, date, date);

String.format("The date: %1$tY-%1$tm-%1$td", date);

String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);

String.format("The date and time in ISO format: %tF %<tT", date);

이 사용 포맷터상대 인덱싱을 대신 SimpleDateFormat하는 스레드로부터 안전하지 않습니다 , BTW.

약간 더 반복적이지만 한 문장 만 필요합니다. 경우에 따라 편리 할 수 ​​있습니다.


답변

Joda (org.joda.time.DateTime)를 사용하지 않는 이유는 무엇입니까? 기본적으로 하나의 라이너입니다.

Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09


답변

SimpleDateFormat을 찾고있는 것 같습니다 .

형식 : yyyy-MM-dd kk : mm : ss