java的日期类

这里讲的是用来生成一个日期的类,不包括格式化这个日期
java日期格式化

Date类

这个类其实现在已经基本淘汰了,比较常用的就这个创建系统当前时间了

//创建一个代表系统当前日期的Date对象
  Date d = new Date();
  • 这里创建的时间,是以ms为单位的,我们可以通过/ 1000 / 60/60/24来转化成天数
package package2021_11;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
	public static void main(String[] args) throws ParseException {
		DateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date start = date.parse("2020-7-1 12:00:00");
		Date last = date.parse("2021-7-1 12:00:00");
		System.out.println((last.getTime() - start.getTime()) / 1000 / 60/60/24);
	}
}


Calendar类

  • Calendar类的功能要比Date类强大很多,可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题。而且在实现方式上也比Date类要复杂一些

1、Calendar类对象的创建

Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

2、创建一个代表系统当前日期的Calendar对象

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

3、创建一个指定日期的Calendar对象

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

  • 创建一个代表2014年5月9日的Calendar对象
//调用:public final void set(int year,int month,int date)
Calendar c1 = Calendar.getInstance();
c1.set(2014, 5 , 9);

4、Calendar类对象信息的设置与获得

(1) Calendar类对象信息的设置

A、Set设置

   如调用以下两个比较常用的方法:
   public final void set(int year,int month,int date)
   set(int year, int month, int date, int hourOfDay, int minute, int second) 

java c1.set(2014, 6, 9);//把Calendar对象c1的年月日分别设这为:2014、6、9

B、利用字段类型设置

如果只设定某个字段,例如日期的值,则可以使用 public void set(int field,int value)

//把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算

 c1.set(Calendar.DATE,10);

//把c1对象代表的年份设置为2015年,其他的所有数值会被重新计算

 c1.set(Calendar.YEAR,2015);

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

Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想


Calendar.MONTH——月份

Calendar.DATE——日期

Calendar.DAY_OF_MONTH——日期,和上面的字段意义相同

Calendar.HOUR——12小时制的小时

Calendar.HOUR_OF_DAY——24小时制的小时

Calendar.MINUTE——分钟

Calendar.SECOND——秒

Calendar.DAY_OF_WEEK——星期几 

C、Add设置(可用与计算时间)

Calendar c1 = Calendar.getInstance();

  • 把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算
    c1.add(Calendar.DATE, 10);

  • 把c1对象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算
    c1.add(Calendar.DATE, -10);

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

(2)Calendar类对象信息的获得(使用get())

Calendar c1 = Calendar.getInstance();

// 获得年份
int year = c1.get(Calendar.YEAR);

// 获得月份
int month = c1.get(Calendar.MONTH);

// 获得日期
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类

GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

1、GregorianCalendar类对象的创建

GregorianCalendar有自己的构造方法,而其父类Calendar没有公开的构造方法。

GregorianCalendar g=new GregorianCalendar() //在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。
//在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。
GregorianCalendar g=new GregorianCalendar(int year, int month, int dayOfMonth) 
GregorianCalendar g=new GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 
GregorianCalendar g=new GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

2、创建一个代表当前日期的GregorianCalendar对象

GregorianCalendar gc = new GregorianCalendar();
GregorianCalendar gc = new GregorianCalendar(2014,6,19);

3、GregorianCalendar有一个方法:boolean isLeapYear(int year) 确定给定的年份是否为闰年

Date类对象与long型时间的互转

//1.将Date类的对象转换为long型时间
Date d= new Date();
//使用对象的getTime()方法完成
long dLong = d.getTime();
//2.将long型时间转换为Date类的对象
long time = 1290876532190L;
//使用Date的构造方法完成
Date d2 = new Date(time);

Calendar对象和long型时间之间的互转

// 将Calendar对象转换为相对时间
Calendar c = Calendar.getInstance();
long t1 = c.getTimeInMillis(); 
// 将long转换为Calendar对象
Calendar c1 = Calendar.getInstance();
long t = 1252785271098L;
c1.setTimeInMillis(t1);

String Date Calendar 三者之间的相互转换

Calendar对象和Date对象之间的互转

//1 .将Calendar对象转换为Date(c.getTime())
Calendar c = Calendar.getInstance();
Date d = c.getTime();
// 2.将Date转换为Calendar对象(s.setTime(date))
Calendar c1 = Calendar.getInstance();
Date d1 = new Date();
//通过setTime()方法后,日历c1所表示的日期就d1的日期
c1.setTime(d1);

String Calendar之间的转换:

//1.Date 转化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
//2.String 转化Date
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date birthday = sdf.parse(str);

Date和Calendar对象之间的转换

//1.Date 转化为Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
//2.Calenda转换为Date
 Calendar calendar = Calendar.getInstance();
 Date date =calendar.getTime();

Date和String对象之间的转换

//1.Calendar 转化 String
  Calendar calendat = Calendar.getInstance();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0;
  String dateStr = sdf.format(calendar.getTime());
//2.String 转化Calendar
String str="2010-5-27";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

最后利用以上各个类的功能,我们可以很简单的实现一些时间计算的功能,下面看几个方法:

l、判断是否是闰年

/**

 * 给定一个年份判断该年份是否为闰年

 */

public static boolean isLeapYear(int year) {

   GregorianCalendar calendar = new GregorianCalendar();

   return calendar.isLeapYear(year);

}

2、获取当前日期的字符串表示形式

/**

 * 利用SimpleDateFormat获取当前日期的字符串表示形式 格式:2009-5-05

 */

public static String getCurrentDate() {

   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

   return dateFormat.format(System.currentTimeMillis());

}

3、给出任意一个年月日得到该天是星期几

/**

 * 给出任意一个年月日得到该天是星期几

 */

public static int getWeek(String date) {

   // 注意参数的大小写格式

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

   Calendar c = Calendar.getInstance();

   try {

       Date d = dateFormat.parse(date);

       c.setTime(d);

   } catch (ParseException e) {

   }

   return c.get(Calendar.DAY_OF_WEEK)-1;

}

4、 获得今天n天以后或者n天以前是那一天

/**

 * 获得距离今天n天的那一天的日期

 */

public static String getDistanceDay(int day) {

   Calendar calen = Calendar.getInstance();

   calen.add(Calendar.DAY_OF_MONTH, day);

   Date date = calen.getTime();

   // 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的date

   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

   return dateFormat.format(date);

}

5、 获得距离指定日期n天的那一天的日期

/**

 * 获得距离指定日期n天的那一天的日期

 */

public static String getDistanceDay(String date, int day) {

   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

   Date d;

   Calendar c =Calendar.getInstance();

   try {

       d = dateFormat.parse(date);

       c.setTime(d);

       c.add(Calendar.DATE, day);



   } catch (ParseException e) {

       e.printStackTrace();

   }

   return dateFormat.format(c.getTime());

}

6、获得给定两个日期相差的天数

/**

 * 获得给定两个日期相差的天数

 *

 */

public static long getGapDays(String date1, String date2) {

   String[] d1 = date1.split("-");

   String[] d2 = date2.split("-");

   Calendar c = Calendar.getInstance();

   c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer

          .parseInt(d1[2]), 0, 0, 0);

   long l1 = c.getTimeInMillis();

   c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer

          .parseInt(d2[2]), 0, 0, 0);

   long l2 = c.getTimeInMillis();

   return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值