时间日期类
1. Date类
1.1 Date概述
Date表示一个特定的时间,精确到毫秒。在java.util包下.
1.2 Date类构造方法
方法 | 说明 |
---|---|
public Date() | 分配一个 Date 对象并将它初始化,它代表的时间分配给它,测量精确到毫秒。 |
public Date(long date) | 分配一个 Date 对象并将它初始化为代表指定的毫秒数自基准时间被称为“时代”,即1970年1月1日,00:00:00 GMT。 |
代码示例:
package com.date;
import java.util.Date;
/**
* @author wyt
*/
public class TestDate {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
long time = 1000*60*60;
Date date1 = new Date(time);
System.out.println(date1);
}
}
//Sat Jul 11 21:12:15 CST 2020
//Thu Jan 01 09:00:00 CST 1970
可见第一个打印的是当前系统时间,
第二个应该为1970.1.1 1点。由于时区不同,故打印的为9点
tips:中国采用的东八区时间
1970-01-01 08:00:00
可见第一个打印的是当前系统时间,第二个应该为1970.1.1 1点。由于时区不同,故打印的为9点
tips:中国采用的东八区时间
1970-01-01 08:00:00
1.3 Date类常用方法
method | explain |
---|---|
public long getTime() | 返回从1970年1月1日 00:00:00到现在的毫秒数 |
public void setTime(long time) | 设置时间。给定的使毫秒值 |
代码示例:
package com.date;
import java.util.Date;
/**
* @author wyt
*/
public class TestDate {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime());
System.out.println(date.getTime() * 1.0/1000/60/60/24/365 + "年");
long time = System.currentTimeMillis();
System.out.println(time);
date.setTime(time);
System.out.println(date.getTime());
}
}
//1594475638127
//50.560490808187474年
//1594475638151
//1594475638151
2. SimpleDateFormat类
2.1 SimpleDateFormat概述
SimpleDateFormat类使一个具体的类,经常用于日期格式化和解析日期
2.2 SimpleDateFormat类构造方法
method | explain |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用给定的模式和日期格式 |
2.3 SimpleDateFormat类常用方法
method | explain |
---|---|
public final String format(Date date) | 格式化,即把Date转成String |
public Date parse(String source) | 把给定的字符串解析成日期 |
代码示例:
package com.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author wyt
*/
public class TestDate {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format);
String s = "2020年5月17日 16:59:59";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//parse方法会抛出一个不可解析的日期的字符串的异常
Date parse = null;
try {
parse = simpleDateFormat1.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(parse);
}
}
//2020年07月11日 22:13:20
//Sun May 17 16:59:59 CST 2020
2.4 日期工具类
package com.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author wyt
*/
public class DateUtils {
public static String DateToString(Date date,String format){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
String s = simpleDateFormat.format(date);
return s;
}
public static Date StringToDate(String s,String format){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Date parse = null;
try {
parse = simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return parse;
}
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
String s = DateUtils.DateToString(date, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(s);
String s1 = "2020年4月30日 05:34:55";
Date date1 = DateUtils.StringToDate(s1, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(date1);
}
}
3.Calendar类
Calender日历类,替换了很多Date类中的方法。把很多数据都作为静态的属性,通过一些特定的方法来获取。比Date处理日期数据更加方便。
Calender是一个abstract修饰的类,没有自己的类对象。这里通过特定的方法getInstance获取Calender日历类对象。
public static Calender getInstance();
默认当前系统时区的Calender对象
常用方法:
public int get(int field);
返回特定数据的数值
public void set(int field, int value);
设置特定字段对应的数据
public final void set(int year,int month,int date)
设置当前日期的年月日
public Date getTime();
返回得到一个Date对象,从计算机元年到现在的毫秒数,保存在date对象中
public abstract void add(int field,int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段
字段名 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,使用时习需要+1) |
DAY_OF_MONTH | 当前月的第几天 |
HOUR | 小时(12小时制) |
HOUR_OF_DAY | 小时(24小时制) |
MINUTE | 分钟 |
SECOND | 秒 |
DAY_OF_WEEK | 周几(周日为1) |
代码示例:
package com.date;
import java.util.Calendar;
/**
* @author wyt
*/
public class TestCalendar {
public static void main(String[] args) {
//获取日历对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
//month是从0开始的[0-11],所以要加1
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DATE);
//打印当前日期-->2020.7.12
System.out.println(year + "年" + month + "月" + day);
//需求1:三年前的今天
c.add(Calendar.YEAR,-3);
year = c.get(Calendar.YEAR);
System.out.println(year + "年" + month + "月" + day);
//需求2:10年后的10天前
c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-10);
year = c.get(Calendar.YEAR);
day = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day);
c.set(2050,10,1);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day);
}
}
//2020年7月12
//2017年7月12
//2027年7月2
//2050年10月1
二月天案例:
package com.date;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* @author wyt
*/
public class CalendarPractice {
public static void main(String[] args) {
//获取日历对象
Calendar calendar = Calendar.getInstance();
//手动输入年份
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
//把日历设置成手动输入的年份的3月1日
calendar.set(year,2,1);
//将3.1日往前推一天就是二月的最后一天
calendar.add(Calendar.DATE,-1);
//获取2月的天数
int day = calendar.get(Calendar.DAY_OF_MONTH);
//输出结果
System.out.println(year + "年2月共有" + day + "天");
}
}
//请输入年份:
//2020
//2020年2月共有29天