Java에서 현재 타임 스탬프를 문자열 형식으로 얻는 방법은 무엇입니까? “yyyy.MM.dd.HH.mm.ss”


174

Java에서 문자열 형식의 타임 스탬프를 얻는 방법은 무엇입니까? "yyyy.MM.dd.HH.mm.ss"

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

이것이 내가 가지고 있지만 Timestamp ()에는 매개 변수가 필요합니다 ...


readyStatement.setTimestamp (1, 새로운 타임 스탬프 (System.currentTimeMillis ()));
Rajat

어떤 오류가 발생합니까?
Robert Columbia

참고로, 같은 몹시 귀찮은 된 날짜 - 시간의 수업 SimpleDateFormat과는 java.sql.Timestamp지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque

답변:


202

바꾸다

new Timestamp();

new java.util.Date()

에 대한 기본 생성자가 없기 때문에 Timestamp또는 메소드를 사용하여 수행 할 수 있습니다.

new Timestamp(System.currentTimeMillis());

5
참고로, 같은 몹시 귀찮은 된 날짜 - 시간의 수업 java.util.Date과는 java.sql.Timestamp지금 기존 에 의해 대체, java.time의 나중에 자바 8에 내장 된 클래스. Oracle의 Tutorial 참조하십시오 .
Basil Bourque

160

java.util.Date타임 스탬프 대신 클래스를 사용하십시오 .

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

이렇게하면 지정된 형식으로 현재 날짜가 표시됩니다.


5
이것은 나에게 도움이되었고 나는 약간의 변경을 new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
가졌으므로

더 나은 new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon

36

tl; dr

최신 java.time 클래스 만 사용하십시오 . 절대로 같은 끔찍한 기존의 클래스를 사용하지 않는 SimpleDateFormat, Date또는 java.sql.Timestamp.

ZonedDateTime                    // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now(                            // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )  // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. 
)                                // Returns a `ZonedDateTime` object. 
.format(                         // Generate a `String` object containing text representing the value of our date-time object. 
    DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)                                // Returns a `String`. 

또는 JVM 의 현재 기본 시간대를 사용하십시오.

ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )

java.time 및 JDBC 4.2

현대적인 접근법은 위에서 본 java.time 클래스를 사용합니다 .

귀하의 경우 JDBC 드라이버 와 준수 JDBC 4.2 , 직접 교환 할 수 java.time은 데이터베이스와 객체. PreparedStatement::setObject및을 사용하십시오 ResultSet::getObject.

JDBC 4.2 이전의 드라이버에만 java.sql을 사용하십시오.

JDBC 드라이버가 java.time 유형 지원을 위해 JDBC 4.2를 아직 준수하지 않으면 java.sql 클래스 사용으로 폴백해야합니다.

데이터 저장

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;  // Capture the current moment in UTC.
myPreparedStatement.setObject(  , odt ) ;

데이터를 검색하는 중입니다.

OffsetDateTime odt = myResultSet.getObject(  , OffsetDateTime.class ) ;

와 같은 java.sql 유형 java.sql.Timestamp은 데이터베이스 내외부 전송에만 사용해야합니다. Java 8 이상에서 즉시 java.time 유형으로 변환하십시오.

java.time.Instant

A는 java.sql.TimestampA를 매핑 java.time.Instant, UTC의 타임 라인에 잠시. toInstant이전 클래스에 추가 된 새 변환 방법 을 확인하십시오.

java.sql.Timestamp ts = myResultSet.getTimestamp(  );
Instant instant = ts.toInstant(); 

시간대

원하는 / 예상 시간대를 (적용 ZoneId를 얻기 위해) ZonedDateTime.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

형식화 된 문자열

a DateTimeFormatter를 사용하여 문자열을 생성하십시오. 패턴 코드는 코드 코드와 유사 java.text.SimpleDateFormat하지만 정확하게는 아니므로 문서를주의 깊게 읽으십시오.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

이 특정 형식은 UTC에서 오프셋 또는 시간대 표시가 없기 때문에 정확한 의미는 모호 합니다.

ISO 8601

이 문제에 대해 언급이있는 경우 직접 롤링하는 대신 표준 ISO 8601 형식을 사용하는 것이 좋습니다 . 표준 형식은 귀하의 형식과 매우 유사합니다. 예를 들면 다음과 같습니다
2016-02-20T03:26:32+05:30..

java.time 클래스는 기본적으로 이러한 표준 형식을 사용하므로 패턴을 지정할 필요가 없습니다. 이 ZonedDateTime클래스는 표준 시간대 이름을 추가하여 표준 형식을 확장합니다 (현명한 개선).

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

java.sql로 변환

java.time에서로 다시 변환 할 수 있습니다 java.sql.Timestamp. 에서을 추출 Instant하십시오 ZonedDateTime.

java.time 클래스와의 변환을 용이하게하기 위해 이전 클래스에 새로운 메소드가 추가되었습니다.

java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );

Java (레거시 및 현대) 및 표준 SQL의 날짜-시간 유형 테이블


java.time에 대하여

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

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

java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


"yyyy.MM.dd.HH.mm.ss"형식으로 현재 벽시계 타임 스탬프를 얻는 올바른 방법은 무엇입니까? 현지 시간대의 하드 코딩 된 문자열을 명시 적으로 지정하지 않습니까? 그것이 주제 초보가 요구 한
것인데

@ t7ko tl; dr 섹션 에 예제 코드 줄을 추가 하여 JVM의 현재 기본 시간대를 명시 적으로 요청하는 방법을 보여줍니다. 인수없이`now () '를 호출하는 것은 동일하지만 기본값을 사용하거나 시간대의 중요한 문제에 대해 무지하거나 잊어 버린 경우 명확하지 않습니다.
바질 부르 케

32

Timestamp 대신 java.util.Date를 사용할 수 있습니다.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

6

보다 적절한 방법은 생성자에서 로캘 영역을 매개 변수로 지정하는 것입니다. 아래 예는 미국 로캘 지역을 사용합니다. 날짜 형식은 로케일에 따라 다르며 로케일을 사용하여 사용자의 지역 로케일 (Java Platform SE 7) 의 관습 및 규칙에 따라 정보를 조정합니다.

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());

1
"로케일 영역"과 같은 것은 없습니다. 혼란스럽고 Locale시간대가 관련이없는 것 같습니다. Locale형식에 대한 문화적 규범과 월 / 일 이름에 사용되는 인간 언어를 제어합니다. 시간대는 일부 지역의 벽시계 시간에 맞게 날짜-시간 표현을 조정합니다 . 이 질문의 경우, 문화적 규범을 적용 할 때 형식 문제가없고 특정 인간 언어로 현지화 할 월 / 일 이름도 없으므로 로캘은 관련이 없습니다.
Basil Bourque 2012

@BasilBourque 입력 해 주셔서 감사합니다. 답변을보다 명확하게 업데이트했습니다.
user3144836

4

다음을 사용할 수 있습니다

new java.sql.Timestamp(System.currentTimeMillis()).getTime()

Result : 1539594988651

이것이 도움이되기를 바랍니다. 보상 포인트가 아닌 나의 제안.


요청한 문자열 형식이 없습니다. 또한 비슷한 답변에 추가되는 유일한 것은 불필요한 합병증 인 것 같습니다.
Ole VV

4

java.timeJava 8 이상을 사용하는 경우 최신 클래스를 사용하십시오 .

String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());

Basil Bourque의 대답은 꽤 좋습니다. 그러나 너무 깁니다. 많은 사람들이 그것을 읽을 인내심이 없을 것입니다. 상위 3 개의 답변이 너무 오래되어 Java new bee를 오도 할 수 있으므로 새로운 개발자에게이 짧고 현대적인 답변을 제공합니다. 이 답변이 끔찍한 사용을 줄일 수 있기를 바랍니다 SimpleDateFormat.

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