Java에서 문자열 형식의 타임 스탬프를 얻는 방법은 무엇입니까? “yyyy.MM.dd.HH.mm.ss”
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());
이것이 내가 가지고 있지만 Timestamp ()에는 매개 변수가 필요합니다 …
답변
바꾸다
new Timestamp();
와
new java.util.Date()
에 대한 기본 생성자가 없기 때문에 Timestamp
또는 메소드를 사용하여 수행 할 수 있습니다.
new Timestamp(System.currentTimeMillis());
답변
java.util.Date
타임 스탬프 대신 클래스를 사용하십시오 .
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
이렇게하면 지정된 형식으로 현재 날짜가 표시됩니다.
답변
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.Timestamp
A를 매핑 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.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 클래스는 어디서 구할 수 있습니까?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 이상 -번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스 의 최신 버전의 Android 번들 구현 .
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트 는 위에서 언급 한 ThreeTen-Backport를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
Timestamp 대신 java.util.Date를 사용할 수 있습니다.
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
답변
보다 적절한 방법은 생성자에서 로캘 영역을 매개 변수로 지정하는 것입니다. 아래 예는 미국 로캘 지역을 사용합니다. 날짜 형식은 로케일에 따라 다르며 로케일을 사용하여 사용자의 지역 로케일 (Java Platform SE 7) 의 관습 및 규칙에 따라 정보를 조정합니다.
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());
답변
다음을 사용할 수 있습니다
new java.sql.Timestamp(System.currentTimeMillis()).getTime()
Result : 1539594988651
이것이 도움이되기를 바랍니다. 보상 포인트가 아닌 나의 제안.
답변
java.time
Java 8 이상을 사용하는 경우 최신 클래스를 사용하십시오 .
String s = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
Basil Bourque의 대답은 꽤 좋습니다. 그러나 너무 깁니다. 많은 사람들이 그것을 읽을 인내심이 없을 것입니다. 상위 3 개의 답변이 너무 오래되어 Java new bee를 오도 할 수 있으므로 새로운 개발자에게이 짧고 현대적인 답변을 제공합니다. 이 답변이 끔찍한 사용을 줄일 수 있기를 바랍니다 SimpleDateFormat
.