>  기사  >  Java  >  Java에서 Date 날짜 및 시간 클래스를 사용하는 방법

Java에서 Date 날짜 및 시간 클래스를 사용하는 방법

王林
王林앞으로
2023-05-10 17:25:062434검색

java.util 패키지는 현재 날짜와 시간을 캡슐화하는 Date 클래스를 제공합니다. Date 클래스는 Date 객체를 인스턴스화하는 두 개의 생성자를 제공합니다.

첫 번째 생성자는 현재 날짜와 시간을 사용하여 객체 를 초기화합니다.

Date( )

두 번째 생성자는 1970년 1월 1일 이후의 밀리초인 매개변수를 받습니다.

Date(long millisec)

Date 객체가 생성된 후 다음 메소드를 호출할 수 있습니다.

23을 반환합니다. 45678910
Serial number Method 설명
1 boolean after(Date date), 호출하는 Date 객체가 이 메서드는 날짜 이후에 true를 반환하고, 그렇지 않으면 false
boolean before(Date date)를 반환합니다. 이 메서드를 호출하는 Date 객체가 지정된 날짜 이전에 true를 반환하면 그렇지 않으면 false
Object clone( )은 이 객체의 복사본을 반환합니다.
int CompareTo(Date date)는 지정된 날짜와 함께 이 메서드가 호출될 때 Date 객체를 비교합니다. 둘이 같으면 0이 반환됩니다. 호출 객체가 지정된 날짜 이전이면 음수가 반환됩니다. 호출 객체는 지정된 날짜
int CompareTo(Object obj) 이후에 양수를 반환합니다. obj가 Date 유형인 경우 작업은 CompareTo(Date)와 동일합니다. 그렇지 않으면 ClassCastException
boolean equals(Object date)가 발생하고, 이 메소드를 호출하는 Date 객체가 지정된 날짜와 같을 때 true를 반환하고, 그렇지 않으면 false
long getTime()을 반환하고, 반환합니다. 1970년 1월 1일 00:00:00 GMT
int hashCode( ) 이후 이 Date 객체가 나타내는 밀리초 수는 이 객체의 해시 코드 값을 반환합니다.
void setTime( 오랜 시간), 1970년 1월 1일 00:00:00 GMT
String toString() 이후의 밀리초 수를 사용하여 시간과 날짜를 설정하고, 이 Date 객체를 다음 형식의 문자열로 변환합니다. mon dd hh:mm:ss zzz yyyy 여기서: dow는 요일(Sun, Mon, Tue, Wed, Thu, Fri, Sat)입니다.
현재 날짜 시간을 가져와서 인쇄하는 예

:

import java.util.Date;
  
public class DateDemo {
   public static void main(String[] args) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用 toString() 函数显示日期时间
       System.out.println(date.toString());
   }
}
// 实例编译运行结果如下:
// Tue Apr 04 22:50:40 CST 2023
Date 비교

Java는 다음 세 가지 방법을 사용하여 두 날짜를 비교합니다.

    getTime() 메서드를 사용하여 두 날짜를 가져옵니다. (1970년부터 1월 1일에 경과된 밀리초 값)을 입력한 다음 두 값을 비교합니다.
  • before(), after() 및 equals() 메서드를 사용하세요. 예를 들어, 12일이 18일보다 빠르면 new Date(99, 2, 12).before(new Date (99, 2, 18))는 true를 반환합니다.
  • Comparable 인터페이스에 의해 정의된 CompareTo() 메서드를 사용하고 Date 클래스가 이 인터페이스를 구현합니다.
  • SimpleDateFormat을 사용하여 날짜 형식 지정

SimpleDateFormat은 로케일을 구분하는 방식으로 날짜 형식을 지정하고 구문 분석하는 클래스입니다

. SimpleDateFormat을 사용하면 실행할 사용자 정의 날짜-시간 형식을 선택할 수 있습니다. 예:

import  java.util.*;
import java.text.*;
 
public class DateDemo {
   public static void main(String[] args) {
 
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
 
      System.out.println("当前时间为: " + ft.format(dNow));
   }
}
// 实例编译运行结果如下:
// 当前时间为: 2023-04-04 10:55:24
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); 이 코드 줄은 변환 형식을 설정합니다. 여기서 yyyy는 전체 AD 연도, MM은 월, dd입니다. 는 날짜이고, HH:mm:ss는 시, 분, 초입니다.

참고

: 일부 형식은 대문자이고 일부 형식은 소문자입니다. 예를 들어 MM은 월, mm은 분, HH는 12시간 형식입니다. 날짜 및 시간의 형식 인코딩

시간 패턴 문자열은 시간 형식을 지정하는 데 사용됩니다. 이 모드에서는 모든 ASCII 문자가 다음과 같이 정의된 모드 문자로 유지됩니다.

문자 Ad 연도 월일A.M./P .M. ) 형식 시간시간(0~23)분초 ㅋㅋㅋ 주의 요일 월 한 해의 주 수월의 주 수A.M . 시간대텍스트 구분 기호작은따옴표
설명 샘플
y
2001 M
7월 또는 07 d
10 h
12 H
22 m
30 s
55 F
2(7월 둘째 수요일) w
40 W
1 a
10 z
동부 표준시 '
구분 기호 "
`

使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

  • %tY:输出四位数的年份,例如:2023

  • %ty:输出两位数的年份,例如:23

  • %tm:输出两位数的月份,例如:02

  • %tB:输出月份的全名,例如:February

  • %tb:输出月份的缩写,例如:Feb

  • %tA:输出星期的全名,例如:Wednesday

  • %ta:输出星期的缩写,例如:Wed

  • %td:输出两位数的日期,例如:24

  • %te:输出一位或两位数的日期,例如:24 或 02

  • %tH:输出24小时制的小时数,例如:23

  • %tI:输出12小时制的小时数,例如:11

  • %tM:输出分钟数,例如:45

  • %tS:输出秒数,例如:30

  • %tp:输出上午还是下午,例如:AM 或 PM

  • %tZ:输出时区,例如:GMT+08:00

转换符 说明 示例
%tc 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
%tF "年-月-日"格式 2007-10-27
%tD "月/日/年"格式 10/27/07
%tr "HH:MM:SS PM"格式(12时制) 02:25:51 下午
%tT "HH:MM:SS"格式(24时制) 14:28:16
%tR "HH:MM"格式(24时制) 14:28

printf格式化日期实例

格式化日期:

import java.util.Date;
public class DateFormatExample {
   public static void main(String[] args) {
      Date date = new Date();
        System.out.printf("%tY-%tm-%td %tH:%tM:%tS %tZ", date, date, date, date, date, date, date);
   }
}
// 执行输出结果为:
// 2023-04-05 09:59:23 CST

使用转换符格式化日期:

import java.util.Date;
 
public class DateDemo {
 
  public static void main(String[] args) {
     // 初始化 Date 对象
     Date date = new Date();
 
     //c的使用  
    System.out.printf("全部日期和时间信息:%tc%n",date);          
    //f的使用  
    System.out.printf("年-月-日格式:%tF%n",date);  
    //d的使用  
    System.out.printf("月/日/年格式:%tD%n",date);  
    //r的使用  
    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
    //t的使用  
    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
    //R的使用  
    System.out.printf("HH:MM格式(24时制):%tR",date);  
  }
}
// 实例编译运行结果如下:
// 全部日期和时间信息:星期三 四月 05 10:06:21 CST 2023
// 年-月-日格式:2023-04-05
// 月/日/年格式:04/05/23
// HH:MM:SS PM格式(12时制):10:06:21 上午
// HH:MM:SS格式(24时制):10:06:21
// HH:MM格式(24时制):10:06

如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了。因此,可以利用一个格式化字符串指出要被格式化的参数的索引。索引必须紧跟在 % 后面,而且必须以 $ 结束。例如:

import java.util.Date;
  
public class DateDemo {
 
   public static void main(String[] args) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 使用toString()显示日期和时间
       // %1$索引指向 "Due date:"
       // %2$索引指向 date
       System.out.printf("%1$s %2$tB %2$td, %2$tY", 
                         "Due date:", date);
   }
}
// 实例编译运行结果如下:
// Due date: 四月 05, 2023

或者,你可以使用 < 标志。它表明先前被格式化的参数要被再次使用。例如:

import java.util.Date;
  
public class DateDemo {
 
   public static void main(String[] args) {
       // 初始化 Date 对象
       Date date = new Date();
        
       // 显示格式化时间
       System.out.printf("%s %tB %<te, %<tY", 
                         "Due date:", date);
   }
}
// 实例编译运行结果如下:
// Due date: 四月 5, 2023

定义日期格式的转换符可以使日期通过指定的转换符生成新字符串。这些日期转换符如下所示:

import java.util.*;
  
public class DateDemo {
   public static void main(String[] args) {
       Date date=new Date();                                      
        //b的使用,月份简称  
        String str=String.format(Locale.US,"英文月份简称:%tb",date);       
        System.out.println(str);                                                                              
        System.out.printf("本地月份简称:%tb%n",date);  
        //B的使用,月份全称  
        str=String.format(Locale.US,"英文月份全称:%tB",date);  
        System.out.println(str);  
        System.out.printf("本地月份全称:%tB%n",date);  
        //a的使用,星期简称  
        str=String.format(Locale.US,"英文星期的简称:%ta",date);  
        System.out.println(str);  
        //A的使用,星期全称  
        System.out.printf("本地星期的简称:%tA%n",date);  
        //C的使用,年前两位  
        System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);  
        //y的使用,年后两位  
        System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);  
        //j的使用,一年的天数  
        System.out.printf("一年中的天数(即年的第几天):%tj%n",date);  
        //m的使用,月份  
        System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);  
        //d的使用,日(二位,不够补零)  
        System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);  
        //e的使用,日(一位不补零)  
        System.out.printf("月份的日(前面不补0):%te",date);  
   }
}
// 输出结果为:
// 英文月份简称:Apr
// 本地月份简称:四月
// 英文月份全称:April
// 本地月份全称:四月
// 英文星期的简称:Wed
// 本地星期的简称:星期三
// 年的前两位数字(不足两位前面补0):20
// 年的后两位数字(不足两位前面补0):23
// 一年中的天数(即年的第几天):095
// 两位数字的月份(不足两位前面补0):04
// 两位数字的日(不足两位前面补0):05
// 月份的日(前面不补0):5

解析字符串为时间

SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:

import java.util.*;
import java.text.*;
  
public class DateDemo {
 
   public static void main(String[] args) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
 
      String input = args.length == 0 ? "1818-11-11" : args[0]; 
 
      System.out.print(input + " Parses as "); 
 
      Date t; 
 
      try { 
          t = ft.parse(input); 
          System.out.println(t); 
      } catch (ParseException e) { 
          System.out.println("Unparseable using " + ft); 
      }
   }
}
// 实例编译运行结果如下:
// 1818-11-11 Parses as Wed Nov 11 00:00:00 CST 1818

休眠(sleep)

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。例如,下面的程序会休眠3秒:

import java.util.*;
  
public class SleepDemo {
   public static void main(String[] args) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(1000*3);   // 休眠3秒
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) { 
          System.out.println("Got an exception!"); 
      }
   }
}
// 实例编译运行结果如下:
// Thu Apr 06 11:18:56 CST 2023
// Thu Apr 06 11:18:59 CST 2023

测量时间间隔(以毫秒为单位)的实例:\color{red}{测量时间间隔(以毫秒为单位)的实例 :}测量时间间隔(以毫秒为单位)的实例:

import java.util.*;
  
public class DiffDemo {
 
   public static void main(String[] args) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}
// 实例编译运行结果如下:
// Thu Apr 06 11:25:14 CST 2023
// Thu Apr 06 11:25:17 CST 2023
// Difference is : 3038

Calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,但在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。例如创建一个代表系统当前日期的Calendar对象:

Calendar c = Calendar.getInstance();//默认是当前日期

或者创建一个指定日期的Calendar对象(注:Calendar 的月份是从 0 开始的):

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Calendar类对象字段类型:Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想:

常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期几

Calendar类对象信息的设置

set设置

调用 public final void set(int year,int month,int date) 方法。例如:

Calendar c1 = Calendar.getInstance();
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

如果只设定某个字段,例如日期的值,则可以使用 public void set(int field,int value) 方法。例如,把 c1对象代表的日期设置为10号,其他的所有数值会被重新计算:

Calendar c1 = Calendar.getInstance();
c1.set(Calendar.DATE,10);

其他字段属性set的意义以此类推。

add设置

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算:

Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, 10);

把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算:

Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, -10);

其他字段属性的add的意义以此类推。

Calendar类对象信息的获得

Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar类

Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这是代表公历定义的两个时代。

下面列出GregorianCalendar对象的几个构造方法

  • GregorianCalendar() —— 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。

  • GregorianCalendar(int year, int month, int date) —— 在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。

  • GregorianCalendar(int year, int month, int date, int hour, int minute) —— 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

  • GregorianCalendar(int year, int month, int date, int hour, int minute, int second) —— 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。

  • GregorianCalendar(Locale aLocale) —— 在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。

  • GregorianCalendar(TimeZone zone) —— 在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

  • GregorianCalendar(TimeZone zone, Locale aLocale) —— 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。

这里是GregorianCalendar 类提供的一些尝用的方法列表

  • void add(int field, int amount) —— 根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。

  • protected void computeFields() —— 转换UTC毫秒值为时间域值。

  • protected void computeTime() —— 覆盖Calendar ,转换时间域值为UTC毫秒值。

  • boolean equals(Object obj) —— 比较此 GregorianCalendar 与指定的 Object。

  • int get(int field) —— 获取指定字段的时间值。

  • int getActualMaximum(int field) —— 返回当前日期,给定字段的最大值。

  • int getActualMinimum(int field) —— 返回当前日期,给定字段的最小值。

  • int getGreatestMinimum(int field) —— 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。

  • Date getGregorianChange() —— 获得格里高利历的更改日期。

  • int getLeastMaximum(int field) —— 返回此 GregorianCalendar 实例给定日历字段的最低的最大值。

  • int getMaximum(int field) —— 返回此 GregorianCalendar 实例的给定日历字段的最大值。

  • Date getTime() —— 获取日历当前时间。

  • long getTimeInMillis() —— 获取用长整型表示的日历的当前时间。

  • TimeZone getTimeZone() —— 获取时区。

  • int getMinimum(int field) —— 返回给定字段的最小值。

  • int hashCode() —— 重写hashCode。

  • boolean isLeapYear(int year) —— 确定给定的年份是否为闰年。

  • void roll(int field, boolean up) —— 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。

  • void set(int field, int value) —— 用给定的值设置时间字段。

  • void set(int year, int month, int date) —— 设置年、月、日的值。

  • void set(int year, int month, int date, int hour, int minute) —— 设置年、月、日、小时、分钟的值。

  • void set(int year, int month, int date, int hour, int minute, int second) —— 设置年、月、日、小时、分钟、秒的值。

  • void setGregorianChange(Date date) —— 设置 GregorianCalendar 的更改日期。

  • void setTime(Date date) —— 用给定的日期设置Calendar的当前时间。

  • void setTimeInMillis(long millis) —— 用给定的long型毫秒数设置Calendar的当前时间。

  • void setTimeZone(TimeZone value) —— 用给定时区值设置当前时区。

  • String toString() —— 返回代表日历的字符串。

GregorianCalendar 使用实例

mport java.util.*;
  
public class GregorianCalendarDemo {
 
   public static void main(String[] args) {
      String months[] = {
      "Jan", "Feb", "Mar", "Apr",
      "May", "Jun", "Jul", "Aug",
      "Sep", "Oct", "Nov", "Dec"};
      
      int year;
      // 初始化 Gregorian 日历
      // 使用当前时间和日期
      // 默认为本地时间和时区
      GregorianCalendar gcalendar = new GregorianCalendar();
      // 显示当前时间和日期的信息
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));
      
      // 测试当前年份是否为闰年
      if(gcalendar.isLeapYear(year)) {
         System.out.println("当前年份是闰年");
      }
      else {
         System.out.println("当前年份不是闰年");
      }
   }
}

// 实例编译运行结果如下:
// Date: Apr 6 2023
// Time: 3:35:13
// 当前年份不是闰年

方法实例:\color{red}{方法实例:}方法实例:

时间戳转换成时间

public class Test {
    public static void main(String args[]) {
        // 获取当前时间戳
        Long timeStamp = System.currentTimeMillis();
        // 时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 时间戳转换成时间
        String sd = sdf.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
        System.out.println("格式化结果:" + sd);

        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒");
        String sd2 = sdf2.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
        System.out.println("格式化结果:" + sd2);
    }
}

// 实例编译运行结果如下:
// 格式化结果:2023-04-23 14:24:13
// 格式化结果:2023 年 04 月 23 日 14 时 24 分 13 秒

위 내용은 Java에서 Date 날짜 및 시간 클래스를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제