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);
답변
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.Date
에 Instant
. 이 Instant
클래스는 나노초 의 해상도 (소수점의 최대 9 자리)로 UTC 의 타임 라인에서 순간을 나타냅니다 .
java.time과의 변환은 이전 클래스에 추가 된 새로운 메소드에 의해 수행됩니다.
Instant instant = myUtilDate.toInstant();
모두 당신 java.util.Date
과 java.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