자바 시간 처리 절차
(1),Calender 소개
Calendar 의 중국어 번역 은 달력 입 니 다.실제로 역사상 시간 을 재 는 방법 은 여러 가지 가 있 습 니 다.따라서 시간의 통일 을 위해 달력 의 선택 을 지정 해 야 합 니 다.그러면 현재 가장 보급 되 고 통용 되 는 달력 은 바로'Gregorian Calendar'이다.바로 우리 가 연 도 를 이야기 할 때 자주 사용 하 는'서기**년'이다.Calendar 는 자바 에서 추상 적 인 클래스(Abstract Class)이 고 Gregorian Calendar 는 구체 적 인 실현 입 니 다.Calendar.getInstance()에서 얻 은 인 스 턴 스 는'GreogrianCalendar'대상 입 니 다.
(2)간단 한 날짜 사용
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.DATE));//-----------------------
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//---------------
System.out.println(cal.get(Calendar.DAY_OF_WEEK));//---------------- , , 3
System.out.println( cal.get(Calendar.DAY_OF_YEAR));//----------------
System.out.println( cal.get(Calendar.HOUR));//----------------------- 12
System.out.println( cal.get(Calendar.HOUR_OF_DAY));//---------------- 24 ,
System.out.println(cal.get(Calendar.MILLISECOND));//----------------
System.out.println( cal.get(Calendar.MINUTE));//---------------------
System.out.println( cal.get(Calendar.SECOND));//---------------------
System.out.println(cal.get(Calendar.WEEK_OF_MONTH));//--------------
System.out.println(cal.get(Calendar.WEEK_OF_YEAR));//----------------
System.out.println(cal.get(Calendar.MONTH));//----------------------- +1, , -1
System.out.println(cal.get(Calendar.MONTH)-1); //
(3),Date 와 의 전환
Calendar calendar = Calendar.getInstance();
// Calendar Date
Date date = calendar.getTime();
// Date Calendar ,
// , Date
calendar.setTime(date);
0 1, , 7 8。
calendar.set(Calendar.MONTH, 7);
2000-01-01
calendar.set(2000,1,1)
calendar.get(calendar.DAY_OF_WEEK )
물론 Calender 는 최초 로 처리 한 것 으로 jdk 1.6 의 물건 은 비교적 시대 에 뒤떨어 질 수 밖 에 없다.2.Apache 의 DateUtils
(1)가방 도입
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
(2)할 말 없 이 통역 하면 돼
/**
*
*/
public static final long MILLIS_PER_SECOND = 1000
/**
*
*/
public static final long MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND
/**
*
*/
public static final long MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE
/**
*
*/
public static final long MILLIS_PER_DAY = 24 * MILLIS_PER_HOUR
/**
* , 。
*/
public static final int SEMI_MONTH = 1001
/**
* , 。
*/
public static final int RANGE_WEEK_SUNDAY = 1
/**
* , 。
*/
public static final int RANGE_WEEK_MONDAY = 2
/**
* , 。
*/
public static final int RANGE_WEEK_RELATIVE = 3
/**
* , 。
*/
public static final int RANGE_WEEK_CENTER = 4
/**
* , 。
*/
public static final int RANGE_MONTH_SUNDAY = 5
/**
* , 。
*/
public static final int RANGE_MONTH_MONDAY = 6
/**
* , , :DateUtils.parseDate(str) 。
* javabeen 。
*/
public DateUtils()
/**
* 。
*
* @param date1 , , null
* @param date2 , , null
*/
public static boolean isSameDay(final Date date1, final Date date2)
/**
* 。
*
* @param cal1 , , null
* @param cal2 , , null
*/
public static boolean isSameDay(final Calendar cal1, final Calendar cal2)
/**
*
*
*
* @param date1 , , null
* @param date2 , , null
*/
public static boolean isSameInstant(final Date date1, final Date date2)
/**
*
*
*
* @param cal1 , , null
* @param cal2 , , null
*/
public static boolean isSameInstant(final Calendar cal1, final Calendar cal2)
/**
*
*
*
* @param cal1 , , null
* @param cal2 , , null
*/
public static boolean isSameLocalTime(final Calendar cal1, final Calendar cal2)
/**
* parsePatterns str 。
*
* parsePatterns , , ParseException 。
*
* @param str , null
* @param parsePatterns str , , null
*/
public static Date parseDate(final String str, final String... parsePatterns) throws ParseException
/**
* parsePatterns str 。
* locale 。
*
* parsePatterns , , ParseException 。
*
* @param str , null
* @param locale locale , null, locale
* @param parsePatterns str , , null
*/
public static Date parseDate(final String str, final Locale locale, final String... parsePatterns) throws ParseException
/**
* parsePatterns str 。
*
* parsePatterns , , ParseException 。
* , :"February 942, 1996" 。
*
* @param str , null
* @param parsePatterns str , , null
*/
public static Date parseDateStrictly(final String str, final String... parsePatterns) throws ParseException
/**
* parsePatterns str 。
* locale 。
*
* parsePatterns , , ParseException 。
* , :"February 942, 1996" 。
*
* @param str , null
* @param locale locale , null, locale
* @param parsePatterns str , , null
*/
public static Date parseDateStrictly(final String str, final Locale locale, final String... parsePatterns) throws ParseException
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addYears(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addMonths(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addWeeks(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addDays(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addHours(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addMinutes(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addSeconds(final Date date, final int amount)
/**
* date amount 。
*
* @param date , null
* @param amount ,
*/
public static Date addMilliseconds(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setYears(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setMonths(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setDays(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setHours(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setMinutes(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setSeconds(final Date date, final int amount)
/**
* data 。
*
* @param date , null
* @param amount
*/
public static Date setMilliseconds(final Date date, final int amount)
/**
* 。
*/
public static Calendar toCalendar(final Date date)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 April 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date round(final Date date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 April 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Calendar round(final Calendar date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 April 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date round(final Object date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 13:00:00.000;
* field MONTH, 1 Mar 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date truncate(final Date date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 13:00:00.000;
* field MONTH, 1 Mar 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Calendar truncate(final Calendar date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 13:00:00.000;
* field MONTH, 1 Mar 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date truncate(final Object date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 Apr 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date ceiling(final Date date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 Apr 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Calendar ceiling(final Calendar date, final int field)
/**
* field date 。
*
* , 28 Mar 2002 13:45:01.231,
* field HOUR, 28 Mar 2002 14:00:00.000;
* field MONTH, 1 Apr 2002 0:00:00.000 。
*
* @param date , null
* @param field
*/
public static Date ceiling(final Object date, final int field)
/**
* focus rangeStyle 。
*
* Thursday, July 4, 2002, RANGE_MONTH_SUNDAY,
* Sunday, June 30, 2002 Saturday, August 3, 2002
*
* @param focus
* @param rangeStyle , :
* DateUtils.RANGE_MONTH_SUNDAY,
* DateUtils.RANGE_MONTH_MONDAY,
* DateUtils.RANGE_WEEK_SUNDAY,
* DateUtils.RANGE_WEEK_MONDAY,
* DateUtils.RANGE_WEEK_RELATIVE,
* DateUtils.RANGE_WEEK_CENTER
*/
public static Iterator<Calendar> iterator(final Date focus, final int rangeStyle)
/**
* focus rangeStyle 。
*
* Thursday, July 4, 2002, RANGE_MONTH_SUNDAY,
* Sunday, June 30, 2002 Saturday, August 3, 2002
*
* @param focus
* @param rangeStyle , :
* DateUtils.RANGE_MONTH_SUNDAY,
* DateUtils.RANGE_MONTH_MONDAY,
* DateUtils.RANGE_WEEK_SUNDAY,
* DateUtils.RANGE_WEEK_MONDAY,
* DateUtils.RANGE_WEEK_RELATIVE,
* DateUtils.RANGE_WEEK_CENTER
*/
public static Iterator<Calendar> iterator(final Calendar focus, final int rangeStyle)
/**
* focus rangeStyle 。
*
* Thursday, July 4, 2002, RANGE_MONTH_SUNDAY,
* Sunday, June 30, 2002 Saturday, August 3, 2002
*
* @param focus
* @param rangeStyle , iterator(Calendar, int)
*/
public static Iterator<?> iterator(final Object focus, final int rangeStyle)
/**
* 。 DateFields 。
*
* , ( 0 999 ) 。
* : Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND Calendar.MILLISECOND
* MILLISECOND, 0 。
*
* January 1, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538
* January 6, 2008 7:15:10.538 with Calendar.SECOND as fragment will return 538
* January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10538
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
* (a millisecond cannot be split in milliseconds)
*
* @param calendar , null
* @param fragment
*/
public static long getFragmentInMilliseconds(final Calendar calendar, final int fragment)
/**
* 。 DateFields 。
*
* , ( 0 59 ) 。
* : Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND Calendar.MILLISECOND
* SECOND, 0 。
*
* January 1, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10
* January 6, 2008 7:15:10.538 with Calendar.MINUTE as fragment will return 10
* January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 26110
* (7*3600 + 15*60 + 10)</li>
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar , null
* @param fragment
*/
public static long getFragmentInSeconds(final Calendar calendar, final int fragment)
/**
* 。 DateFields 。
*
* , ( 0 59 )
* : Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND Calendar.MILLISECOND
* MINUTE, 0 。
*
* January 1, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15
* January 6, 2008 7:15:10.538 with Calendar.HOUR_OF_DAY as fragment will return 15
* January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 15
* January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 435 (7*60 + 15)
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar , null
* @param fragment
*/
public static long getFragmentInMinutes(final Calendar calendar, final int fragment)
/**
* 。 DateFields 。
*
* , ( 0 23 ) 。
* : Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND Calendar.MILLISECOND
* HOUR_OF_DAY, 0 。
*
* January 1, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7
* January 6, 2008 7:15:10.538 with Calendar.DAY_OF_YEAR as fragment will return 7
* January 1, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 7
* January 6, 2008 7:15:10.538 with Calendar.MONTH as fragment will return 127 (5*24 + 7)
* January 16, 2008 7:15:10.538 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar , null
* @param fragment
*/
public static long getFragmentInHours(final Calendar calendar, final int fragment)
/**
* 。 DateFields 。
*
* , ( 1 31 ) 。
* : Calendar.YEAR、Calendar.MONTH、Calendar.DAY_OF_YEAR、
* Calendar.DATE、Calendar.HOUR_OF_DAY、Calendar.MINUTE、
* Calendar.SECOND Calendar.MILLISECOND
* DATE, 0 。
*
* January 28, 2008 with Calendar.MONTH as fragment will return 28
* February 28, 2008 with Calendar.MONTH as fragment will return 28
* January 28, 2008 with Calendar.YEAR as fragment will return 28
* February 28, 2008 with Calendar.YEAR as fragment will return 59
* January 28, 2008 with Calendar.MILLISECOND as fragment will return 0
*
* @param calendar , null
* @param fragment
*/
public static long getFragmentInDays(final Calendar calendar, final int fragment)
/**
* field 。
*
* @param cal1 , null
* @param cal2 , null
* @param field Calendar
*/
public static boolean truncatedEquals(final Calendar cal1, final Calendar cal2, final int field)
/**
* field 。
*
* @param date1 , null
* @param date2 , null
* @param field Calendar
*/
public static boolean truncatedEquals(final Date date1, final Date date2, final int field)
/**
* field 。
* 、 、 , 、0、
*
* @param cal1 , null
* @param cal2 , null
* @param field Calendar
*/
public static int truncatedCompareTo(final Calendar cal1, final Calendar cal2, final int field)
/**
* field 。
* 、 、 , 、0、
*
* @param date1 , null
* @param date2 , null
* @param field Calendar
*/
public static int truncatedCompareTo(final Date date1, final Date date2, final int field)
//
System.out.println(DateUtils.addDays(new Date(), 1));//----------------- 。 1
System.out.println(DateUtils.addHours(new Date(), 0));//----------------
Date date = DateUtils.addDays(new Date(), 1);
Date Utils 가 돌아 온 것 은 Date 를 바 꿀 필요 가 없다 는 것 입 니 다.물론 이 른 것 입 니 다.Calender 기반 위 에서 태 어 났 을 뿐 입 니 다.3.JDK 1.8 새로 추 가 된 날짜 API LocalDate|LocalTime|LocalDateTime
새로운 날짜 API 는 변 하지 않 고 다 중 스 레 드 사용 환경 에서(기본 시간 대의 시스템 시계 에서 현재 날짜 시간 을 가 져 옵 니 다.시 차 는 생각 하지 않 아 도 된다)
장점:
1.이전에 사 용 했 던 java.util.Date 월 은 0 부터 시작 합 니 다.우 리 는 보통+1 로 사용 합 니 다.매우 불편 합 니 다.java.time.LocalDate 월 과 주 는 모두 enum 으로 바 뀌 었 습 니 다.
2.java.util.Date 와 Simple DateFormat 은 모두 스 레 드 가 안전 한 것 이 아니 라 LocalDate 와 LocalTime 은 가장 기본 적 인 String 과 마찬가지 로 변 하지 않 는 유형 으로 스 레 드 가 안전 할 뿐만 아니 라 수정 할 수 없습니다.
3.java.util.Date 는'만능 인터페이스'로 날짜,시간,그리고 밀리초 수 를 포함 하여 수 요 를 더욱 명확 하 게 취사선택 합 니 다.
4.새로운 인터페이스 가 더 좋 은 이 유 는 날짜 와 시간의 조작 을 고려 하여 앞으로 미 루 거나 며칠 뒤로 미 루 는 경우 가 자주 발생 하기 때 문 입 니 다.자바.util.Date 로 Calendar 에 맞 춰 많은 코드 를 써 야 하 며,일반적인 개발 자 들 이 반드시 맞 출 수 있 는 것 은 아니다.
(1)、LocalDateTime(년 월 일 시 분 초)
LocalDateTime date = LocalDateTime.now();
//2021-03-26T10:24:14.009784900
System.out.println(date);
//
System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getDayOfMonth());
System.out.println(date.getHour());
System.out.println(date.getMinute());
System.out.println(date.getSecond());
System.out.println(date.getNano());
//
System.out.println(date.getSecond()+1); || System.out.println(date.getSecond()-1);
// LocalDateTime
LocalDateTime date2 = LocalDateTime.of(2017, 12, 17, 9, 31, 31, 31);
System.out.println(date2);
// ,
LocalDateTime date3 = date2.plusDays(12);
System.out.println(date3);
// ,
LocalDateTime date4 = date3.minusYears(2);
System.out.println(date4);
isAfter() boolean
System.out.println(localDateTime.isBefore(LocalDateTime.now()));//--------- false
isBefore() boolean
System.out.println(localDateTime.isAfter(LocalDateTime.now()));//--------- false
isLeapYear() ( LocalDate ) boolean
System.out.println(localDateTime.isEqual(LocalDateTime.now()));//--------- true
(2),LocalDateTime 과 Date 사이 의 전환Date to LocalDateTime
Date todayDate = new Date();
LocalDateTime ldt = Instant.ofEpochMilli( todayDate.getTime() )
.atZone( ZoneId.systemDefault() )
.toLocalDateTime();
System.out.println(ldt);
LocalDateTime to Date
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from( localDateTime.atZone( ZoneId.systemDefault()).toInstant());
System.out.println(date);
물론 재 미 있 는 것 도 많 습 니 다.LocalDate(년 월 일)LocalTime(시 분 초)과 LocalDateTime(년 월 일 시 분 초)이 크게 다 르 지 않 기 때문에 하 나 를 말 하면 됩 니 다.4.Hutool(Java 도구 라 이브 러 리)
비교적 재 미 있 는 자바 도구 라 이브 러 리 로 재 미 있 는 도구 류 를 많이 포함 하여 간단 하고 편리 하 다.
(1)설치
Maven
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.1</version>
</dependency>
Gradle
compile 'cn.hutool:hutool-all:5.6.1'
Maven 중앙 창고Hutool 5.x 는 JDK8+를 지원 합 니 다.Android 플랫폼 에 테스트 가 없 기 때문에 모든 도구 종류 나 도구 방법 이 사용 가능 하 다 고 보장 할 수 없습니다.프로젝트 에 JDK 7 을 사용한다 면 Hutool 4.x 버 전 을 사용 하 십시오.
(2)사용
//
System.out.println(DateUtil.now());//------------------------------
, ,,, 。
총결산한 마디 로 하면 재 미 있 는 도구 류 가 덩어리 져 있 습 니 다.jdk 원생 이 든 다른 사람 이 포장 한 도구 류 든 원 하 시 면 jdk 1.8 의 날짜 api 를 통 해 자신 만 의 날짜 도구 류 를 스스로 포장 할 수 있 습 니 다.인터넷 에 날짜 도구 류 가 너무 많 습 니 다.바퀴 를 중복 만 들 지 마 세 요~~~~~~~~~~~~~~~~~~~~~~오늘 도 원기 가 가득 찬 하루 입 니 다.
이상 은 자바 가 시간 처 리 를 하 는 절차 의 상세 한 내용 입 니 다.자바 시간 처리 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.