Java 로 java.util.Date
객체 를 변환하고 싶습니다 String
.
형식은 2010-05-30 22:15:52
Date
2019 년 에는 사용하지 않는 것이 좋습니다. 이 클래스는 제대로 설계되지 않았고 오래되었습니다. 대신 현대 Java 날짜 및 시간 API 인 java.time의Instant
또는 다른 클래스를 사용하십시오 .
Java 로 java.util.Date
객체 를 변환하고 싶습니다 String
.
형식은 2010-05-30 22:15:52
Date
2019 년 에는 사용하지 않는 것이 좋습니다. 이 클래스는 제대로 설계되지 않았고 오래되었습니다. 대신 현대 Java 날짜 및 시간 API 인 java.time의Instant
또는 다른 클래스를 사용하십시오 .
답변:
메소드를 사용하여 날짜 를 문자열로 변환하십시오 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);
Calendar
일반 대신에 사용 new Date()
합니까? 차이가 있습니까?
MM/dd/yyyy
형식은 바보 깨진입니다. 사용하지 마십시오. 항상 dd/MM/yyyy
또는을 사용하십시오 yyyy-MM-dd
.
yyyy-MM-dd
모든 곳을 선호 하지만 어떻게 할 수 있습니까?).
Commons-lang DateFormatUtils 는 장점 으로 가득합니다 (클래스 패스에 commons-lang이있는 경우)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
null
점검이 필요합니다 .
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.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의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이러한 클래스는 같은 귀찮은 된 날짜 - 시간의 수업을 대신하는 java.util.Date
, .Calendar
, java.text.SimpleDateFormat
.
Joda 타임 프로젝트는 현재의 유지 관리 모드 , java.time로 마이그레이션을 조언한다.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오.
많은 java.time 기능은 자바 6 & 7 백 포팅 ThreeTen - 백 포트 추가에 적응 안드로이드 에 ThreeTenABP (참조 ... 사용 방법 ).
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다.
atOffset
메소드 가 있습니다 . Instant
Javadoc :을 참조하십시오 Instant::atOffset
. Java 8에서는 같은 호출 Instant.now().atOffset( ZoneOffset.UTC ).toString()
이 실행됩니다. 당신의 import
진술을 확인하십시오 . IDE / 프로젝트가 이전 버전의 Java가 아닌 Java 8 이상을 실행하도록 설정되어 있는지 확인하십시오. IdeOne.com에서 실시간으로 실행되는 코드를 참조하십시오. ideone.com/2Vm2O5
평범한 자바의 대체 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
DateTime
객체에 할당하는 대신 DateTimeZone을 전달하는 것이 좋습니다 . new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
SimpleDateFormat을 찾고있는 것 같습니다 .
형식 : yyyy-MM-dd kk : mm : ss
HH
(0-23)이 더 일반적입니다.
한 번에;)
날짜를 얻으려면
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
시간을 얻으려면
String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());
날짜와 시간을 얻으려면
String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());
행복한 코딩 :)
java.util.Date
, java.util.Calendar
그리고 java.text.SimpleDateFormat
지금 기존 에 의해 대체, java.time의 자바 8 자바 9 페이지에 내장 된 클래스 오라클 튜토리얼 .
public static String formateDate(String dateString) {
Date date;
String formattedDate = "";
try {
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return formattedDate;
}
날짜부터 시간 만 필요한 경우 문자열 기능을 사용할 수 있습니다.
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );
이렇게하면 문자열의 시간 부분이 자동으로 잘라지고 안에 저장됩니다 timeString
.
새로운 Java 8 Time API 를 사용하여 레거시 를 형식화 하는 예는 다음과 같습니다 java.util.Date
.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
.withZone(ZoneOffset.UTC);
String utcFormatted = formatter.format(date.toInstant());
ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
// gives the same as above
ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
// 2011-12-03T10:15:30+01:00[Europe/Paris]
String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123
DateTimeFormatter
스레드 안전하므로 (와 달리 SimpleDateFormat
) 효율적으로 캐시 할 수 있다는 것이 좋습니다 .
사전 정의 된 Fomatters 및 패턴 표기법 참조 목록 .
크레딧 :
LocalDateTime으로 날짜를 구문 분석 / 형식화하는 방법은 무엇입니까? (자바 8)
이 시도,
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Date
{
public static void main(String[] args)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = "2013-05-14 17:07:21";
try
{
java.util.Date dt = sdf.parse(strDate);
System.out.println(sdf.format(dt));
}
catch (ParseException pe)
{
pe.printStackTrace();
}
}
}
산출:
2013-05-14 17:07:21
Java의 날짜 및 시간 형식에 대한 자세한 내용은 아래 링크를 참조하십시오.
public static void main(String[] args)
{
Date d = new Date();
SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
System.out.println(form.format(d));
String str = form.format(d); // or if you want to save it in String str
System.out.println(str); // and print after that
}
이것을 시도하자
public static void main(String args[]) {
Calendar cal = GregorianCalendar.getInstance();
Date today = cal.getTime();
DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
String str7 = df7.format(today);
System.out.println("String in yyyy-MM-dd format is: " + str7);
} catch (Exception ex) {
ex.printStackTrace();
}
}
또는 유틸리티 기능
public String convertDateToString(Date date, String format) {
String dateStr = null;
DateFormat df = new SimpleDateFormat(format);
try {
dateStr = df.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dateStr;
}
한 줄 옵션
이 옵션을 사용하면 실제 날짜를 쉽게 작성할 수 있습니다.
이 사용되어 있습니다
Calendar.class
및SimpleDateFormat
다음이 Java8에서 사용하는 논리적 아니다.
yourstringdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
java.util.Date
, java.util.Calendar
그리고 java.text.SimpleDateFormat
지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 을 참조하십시오 .
2019-20-23 09:20:22
20 개월입니까 ??). (2) 대답이 다른 답변에서 아직 다루지 않은 내용을 제공한다는 것을 알 수 없습니다. (3) 젊은이들에게 오래되고 악명 높은 SimpleDateFormat
학급 을 사용하도록 가르치지 마십시오 . 적어도 첫 번째 옵션은 아닙니다. 그리고 예약 없이는 아닙니다. 오늘날 우리는 java.time
최신 Java 날짜 및 시간 API 와 그 기능 이 훨씬 뛰어납니다 DateTimeFormatter
.