Java에서 현재 순간의 년, 월, 일,시, 분, 초 및 밀리 초를 어떻게 얻을 수 있습니까? 나는 그들을 Strings
.
답변
이를 위해 getter를 사용할 수 있습니다 java.time.LocalDateTime
.
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
또는 아직 Java 8을 사용하지 않는 경우 java.util.Calendar
.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
어느 쪽이든 현재 다음과 같이 인쇄됩니다.
2010-04-16 15 : 15 : 17.816
을 변환하려면 int
에 String
의 메이크업에 사용 String#valueOf()
.
결국 당신의 의도가 인간에게 친숙한 문자열 형식으로 정렬하고 표시하는 것이라면 Java8 java.time.format.DateTimeFormatter
( tutorial here ) 을 더 잘 사용 하십시오 .
LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
또는 아직 Java 8을 사용하지 않는 경우 다음을 사용하십시오 java.text.SimpleDateFormat
.
Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
어느 쪽이든 결과는 다음과 같습니다.
2010-04-16T15 : 15 : 17.816 2010 년 4 월 16 일 금요일 15:15:17 GMT 20100416151517
또한보십시오:
답변
joda-time으로 전환하면 세 줄로이 작업을 수행 할 수 있습니다.
DateTime jodaTime = new DateTime();
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));
달력을 사용하지 않고도 날짜의 개별 필드에 직접 액세스 할 수도 있습니다.
System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());
출력은 다음과 같습니다.
jodaTime = 2010-04-16 18:09:26.060
year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60
http://www.joda.org/joda-time/ 에 따르면
Joda-Time은 사실상 Java 용 표준 날짜 및 시간 라이브러리입니다. Java SE 8부터 사용자는 java.time (JSR-310)으로 마이그레이션해야합니다.
답변
// Java 8
System.out.println(LocalDateTime.now().getYear()); // 2015
System.out.println(LocalDateTime.now().getMonth()); // SEPTEMBER
System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
System.out.println(LocalDateTime.now().getHour()); // 7
System.out.println(LocalDateTime.now().getMinute()); // 36
System.out.println(LocalDateTime.now().getSecond()); // 51
System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100
// Calendar
System.out.println(Calendar.getInstance().get(Calendar.YEAR)); // 2015
System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1); // 9
System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7
System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 35
System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32
System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND)); // 481
// Joda Time
System.out.println(new DateTime().getYear()); // 2015
System.out.println(new DateTime().getMonthOfYear()); // 9
System.out.println(new DateTime().getDayOfMonth()); // 29
System.out.println(new DateTime().getHourOfDay()); // 7
System.out.println(new DateTime().getMinuteOfHour()); // 19
System.out.println(new DateTime().getSecondOfMinute()); // 16
System.out.println(new DateTime().getMillisOfSecond()); // 174
// Formatted
// 2015-09-28 17:50:25.756
System.out.println(new Timestamp(System.currentTimeMillis()));
// 2015-09-28T17:50:25.772
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));
// Java 8
// 2015-09-28T17:50:25.810
System.out.println(LocalDateTime.now());
// joda time
// 2015-09-28 17:50:25.839
System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));
답변
Java 8 이상에서는 java.time 패키지를 사용하십시오 .
ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();
ZonedDateTime.now()
기본 시간대의 시스템 시계에서 현재 날짜-시간을 반환하는 정적 메서드입니다. 모든 get 메서드는 int
값을 반환합니다 .
답변
tl; dr
ZonedDateTime.now( // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
ZoneId.of( "America/Montreal" ) // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMinute() // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.
42
ZonedDateTime
특정 지역 (시간대)의 사람들이 사용하는 벽시계 시간에 표시된 현재 순간을 캡처하려면을 사용하십시오 ZonedDateTime
.
시간대는 날짜를 결정하는 데 중요합니다. 주어진 순간에 날짜는 지역별로 전 세계적으로 다릅니다. 예를 들어, 파리 에서 자정 이후 몇 분이 지나면 프랑스 는 몬트리올 퀘벡 에서는 여전히 ‘어제’인 새로운 날 입니다.
시간대가 지정되지 않은 경우 JVM은 현재 기본 시간대를 내재적으로 적용합니다. 이 기본값은 런타임 (!) 중에 언제든지 변경 될 수 있으므로 결과가 다를 수 있습니다. 더 나은 당신의 지정 원하는 / 예상 시간대를 인수로 명시 적으로.
지정 적절한 시간대 이름 의 형식 continent/region
예컨대, America/Montreal
, Africa/Casablanca
, 또는 Pacific/Auckland
. EST
또는 IST
과 같은 3-4 자 약어 는 표준 시간대 가 아니고 , 표준화되지 않았으며, 고유하지도 않은 (!)이므로 사용하지 마십시오.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
많은 게터 중 하나를 호출하여 날짜-시간 조각을 꺼내십시오.
int year = zdt.getYear() ;
int monthNumber = zdt.getMonthValue() ;
String monthName = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ; // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int dayOfMonth = zdt.getDayOfMonth() ;
String dayOfWeek = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
int hour = zdt.getHour() ; // Extract the hour from the time-of-day.
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano = zdt.getNano() ;
java.time의 클래스에 해결 나노초 . 귀하의 질문은 밀리 초 단위 의 1 초를 요청했습니다 . 당연히 백만으로 나누면 데이터 손실 가능성이 있지만 나노초를 밀리 초로 줄일 수 있습니다. 또는 TimeUnit
그러한 변환을 위해 열거 형을 사용하십시오 .
long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;
DateTimeFormatter
String
텍스트 조각을 결합하는를 생성하려면 DateTimeFormatter
class를 사용하십시오 . 이에 대한 자세한 내용은 Stack Overflow를 검색하십시오.
Instant
일반적으로 UTC로 순간을 추적하는 것이 가장 좋습니다. 존 날짜-시간에서 UTC로 조정하려면 Instant
.
Instant instant = zdt.toInstant() ;
그리고 다시 돌아가십시오.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;
LocalDateTime
몇 가지 다른 Answers가 LocalDateTime
클래스를 사용합니다 . 이 클래스는 의도적으로 표준 시간대 또는 UTC로부터의 오프셋 개념이 없기 때문에 실제 순간, 타임 라인의 특정 순간을 추적하는 목적에 적합하지 않습니다.
그래서 무엇이 LocalDateTime
좋은가요? 사용 LocalDateTime
당신이 날짜 및 시간을 적용하고자 할 때 어떤 지역 또는 모든 지방 이 아닌 하나의 특정의 지역.
예를 들어 올해 크리스마스는 LocalDateTime.parse( "2018-12-25T00:00:00" )
. 이 값은 시간대 (a ZoneId
)를 적용 하여 ZonedDateTime
. 크리스마스는 키리바시 에서 먼저 일어난 다음 나중에 뉴질랜드와 극동 아시아 에서 열립니다 . 몇 시간 후 인도에서 크리스마스가 시작됩니다. 아프리카와 유럽에서 한 시간 더 늦었습니다. 그리고 몇 시간이 지날 때까지 미주 지역에서는 여전히 크리스마스가 아닙니다. 한 곳 에서 시작되는 크리스마스 는 ZonedDateTime
. 모든 곳의 크리스마스 는 LocalDateTime
.
java.time 정보
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이나 클래스 가 필요하지 않습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 자바 SE (10) , 그리고 나중에
- 내장.
- 번들로 구현 된 표준 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 사용 방법…을 참조하십시오 .
답변
또는 java.sql.Timestamp를 사용하십시오. 캘린더가 좀 무거워서 프로덕션 코드에서 사용하지 않는 것이 좋습니다. Joda가 더 좋습니다.
import java.sql.Timestamp;
public class DateTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Timestamp(System.currentTimeMillis()));
}
}
답변
자바 7 캘린더 한 줄
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())