java如何生成date类_关于JAVA学习_Date类

一、 Date类

Date类对象的创建:

1、创建一个当前时间的Date对象

//创建一个代表系统当前日期的Date对象

Date d = new Date();

2、创建一个我们指定的时间的Date对象:

使用带参数的构造方法Date(int year, int month, int day) ,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。

//创建一个代表2020年9月28号的Date对象

Date d1 = new Date(2020-1900, 9-1, 28); (注意参数的设置)

3、正确获得一个date对象所包含的信息

如:

Date d2 =  new Date(2020-1900, 9-1, 28);

//获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)

int year = d2.getYear() + 1900;

//获得月份  (注意月份要加1,这样才是日期对象d2所代表的月份)

int month = d2.getMonth() + 1;

//获得日期

int date = d2.getDate();

//获得小时

int hour = d2.getHours();//不设置默认为0

//获得分钟

int minute = d2.getMinutes();

//获得秒

int second = d2.getSeconds();

//获得星期 (注意:0代表星期日、1代表星期1、2代表星期2,其他的一次类推了)

int day = d2.getDay();

二、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对象

Calendar c1 = Calendar.getInstance();

c1.set(2014, 5 - 1, 9);//调用:public final void set(int year,int month,int date)

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

1)Calendar类对象信息的设置

A、Set设置

如:Calendar c1 = Calendar.getInstance();

调用:public final void set(int year,int month,int date)

c1.set(2020-1900, 9-1, 28);//把Calendar对象c1的年月日分别设这为:2020、9、28

B、利用字段类型设置

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

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

c1.set(Calendar.DATE,10);

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

c1.set(Calendar.YEAR,2015);

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

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——星期几

1 packagedemo1;2

3 importjava.text.SimpleDateFormat;4 importjava.util.Calendar;5 importjava.util.Date;6

7 public classTestDate {8

9 public static voidmain(String[] args) {10

11 //date:获取当前系统时间

12 Date date=newDate();13 System.out.println(date);//年-月-日14

15 //SimpleDateFormat:对日期进行格式化

16 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");17 String date1=sdf.format(date);18 System.out.println(date1);19

20

21 Calendar c=Calendar.getInstance();//创建了一个日历对象22 //设置23 //c.set(2020, 9, 29, 9, 10, 21);24 //获取年

25 int y=c.get(Calendar.YEAR);26 //获取月 0-11

27 int month=c.get(Calendar.MONTH)+1;28 //获取日

29 int day=c.get(Calendar.DAY_OF_MONTH);30 //获取时

31 int h=c.get(Calendar.HOUR_OF_DAY);32 //获取分

33 int m=c.get(Calendar.MINUTE);34 //获取秒

35 int s=c.get(Calendar.SECOND);36 System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s);37

38 }39

40 }

4723d904ba7d9c367d9f4b3a52ab309a.png

对日期进行格式化和巧妙计算方法运行时间,方便测试程序:

1 packagedemo1;2

3 importjava.text.ParseException;4 importjava.text.SimpleDateFormat;5 importjava.util.Calendar;6 importjava.util.Date;7

8 public classTestDate {9

10 public static void main(String[] args) throwsParseException {11

12 //date:获取当前系统时间

13 Date date=newDate();14 System.out.println(date);//年-月-日15

16 //SimpleDateFormat:对日期进行格式化 调用format方法

17 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");18 String date1=sdf.format(date);19 System.out.println(date1);20

21

22 Calendar c=Calendar.getInstance();//创建了一个日历对象23 //设置24 //c.set(2020, 9, 29, 9, 10, 21);25 //获取年

26 int y=c.get(Calendar.YEAR);27 //获取月 0-11

28 int month=c.get(Calendar.MONTH)+1;29 //获取日

30 int day=c.get(Calendar.DAY_OF_MONTH);31 //获取时

32 int h=c.get(Calendar.HOUR_OF_DAY);33 //获取分

34 int m=c.get(Calendar.MINUTE);35 //获取秒

36 int s=c.get(Calendar.SECOND);37 System.out.println(y+"-"+month+"-"+day+" "+h+":"+m+":"+s);38

39 //日期字符串转换为Date类型 注意格式一致 java

40 String time="2020-10-8 15:40:15 333";41 SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");42 Date time1 =sdf2.parse(time);43 System.out.println(time1);44 System.out.println("-------------------");45 //获取自1970年 1月1号到现在的总毫秒值

46 long nowTime =System.currentTimeMillis();47 System.out.println(nowTime);48

49 long begin =System.currentTimeMillis();50 print();51 long end =System.currentTimeMillis();52 System.out.println("方法耗时"+(end-begin)+"毫秒");53 }54 //需求:统计一个方法执行所需的毫秒值

55 public static voidprint(){56 for(int i=0;i<1000;i++){57 System.out.println("i="+i);58

59 }60

61

62 System.out.println("---------");63 //获取昨天此时的时间

64 Date time2 = new Date(System.currentTimeMillis()-1000*60*60*24);65 SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");66 String ye =sdf2.format(time2);67 System.out.println("昨天的此时时间为"+ye);68 }69

70

71

72 }

58e52aa30e3fdef5edcb4ae402daf977.png

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) + 1;(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类

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

1、GregorianCalendar类对象的创建

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

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

在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar。

GregorianCalendar(int year, int month, int dayOfMonth)

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

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

GregorianCalendar gc = new GregorianCalendar();

//创建一个代表2014年6月19日的GregorianCalendar对象(注意参数设置,与其父类是一样,月份要减去1)

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

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

四、DateFormat类和SimpleDateFormat类

public class SimpleDateFormat extends DateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。(日期时间输出的工具类)

它允许进行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。所以SimpleDateFormat类可以实现:String 到 Date,Date到String的互转

五、日期类对象之间的互转

9bc1975d4ba0552b56472bd9387bd7e8.png

/* Date Long Calendar*/

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、判断是否是闰年

1 /**

2

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

5 */

6

7 public static boolean isLeapYear(intyear) {8

9 GregorianCalendar calendar = newGregorianCalendar();10

11 returncalendar.isLeapYear(year);12

13 }14

15

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

1 /**

2

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

5 */

6

7 public staticString getCurrentDate() {8

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

11 returndateFormat.format(System.currentTimeMillis());12

13 }

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

1 /**

2

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

5 */

6

7 public static intgetWeek(String date) {8

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

10

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

13 Calendar c =Calendar.getInstance();14

15 try{16

17 Date d =dateFormat.parse(date);18

19 c.setTime(d);20

21 } catch(ParseException e) {22

23 }24

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

27 }

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

1 /**

2

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

5 */

6

7 public static String getDistanceDay(intday) {8

9 Calendar calen =Calendar.getInstance();10

11 calen.add(Calendar.DAY_OF_MONTH, day);12

13 Date date =calen.getTime();14

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

16

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

19 returndateFormat.format(date);20

21 }

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

1 /**

2

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

5 */

6

7 public static String getDistanceDay(String date, intday) {8

9 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");10

11 Date d;12

13 Calendar c =Calendar.getInstance();14

15 try{16

17 d =dateFormat.parse(date);18

19 c.setTime(d);20

21 c.add(Calendar.DATE, day);22

23

24

25 } catch(ParseException e) {26

27 e.printStackTrace();28

29 }30

31 returndateFormat.format(c.getTime());32

33 }

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

1 /**

2

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

5 *6

7 */

8

9 public static longgetGapDays(String date1, String date2) {10

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

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

15 Calendar c =Calendar.getInstance();16

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

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

21 long l1 =c.getTimeInMillis();22

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

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

27 long l2 =c.getTimeInMillis();28

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

31 }32

33

34 ]

https://www.cnblogs.com/gu-bin/p/10022703.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值