日期类
1.Date类概述和构造方法
public Date() // 分配一个Date对象,并初始化,以便它代表他被分配的时间,精确到毫秒。
public Date(long date) //分配一个Date对象,并将其初始化为从标准基时间起指定的毫秒数。
import java.util.Date;
public class Date_Demo0 {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
//toString()方法被重写
System.out.println(d.toString());
long date = 1000 * 60 * 60;
//一小时
Date d1 = new Date(date);
System.out.println(d1);
}
}
输出结果:
Tue Oct 15 12:18:48 CST 2019
Tue Oct 15 12:18:48 CST 2019
Thu Jan 01 09:00:00 CST 1970
2.Date的常用方法
public long getTime() //获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime() //设置时间,给的是毫秒值
import java.util.Date;
public class Date_Demo1 {
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1.getTime() / 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
long time = System.currentTimeMillis();
d1.setTime(time);
System.out.println(d1);
}
}
输出结果:
49.81972906871511年
Tue Oct 15 12:49:35 CST 2019
3.SimpleDateFormat类的概述
public SimpleDateFormat() // 构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern) // 构造一个SimpleDateFormat使用给定的的模式和日期格式
1.格式化(从Date到String)
public final String format() //将日期格式化成日期/时间字符串
2.解析(从String到Date)
public Date parse(String source)//从给定字符串的开始解析文本以生成日期
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormat_Demo {
public static void main(String[] args) throws ParseException {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat();
String s = sdf.format(d);
System.out.println(s);
Date d1 = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s1 = sdf1.format(d1);
System.out.println(s1);
System.out.println("-------------------");
String s3 = "2019年10月15日 14:24:36";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d2 = sdf2.parse(s3);
System.out.println(d2);
}
}
输出结果:
19-10-15 下午2:28
2019年10月15日 14:28:47
Tue Oct 15 14:24:36 CST 2019
案例:创建一个日期工具类,可自由转换时间格式
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
private DateUtils(){};
public static String dateToString(Date date, String format){
SimpleDateFormat std = new SimpleDateFormat(format);
String s = std.format(date);
return s;
}
public static Date StringToDate(String format,String s) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = sdf.parse(s);
return date;
}
}
public class Date_Test {
public static void main(String[] args) throws ParseException {
Date date = new Date();
String s = "yyyy年MM月dd日 HH:mm:ss";
String s1 = "yyyy-MM-dd";
String s2 = "HH:mm:ss";
String s3 = DateUtils.dateToString(date, s);
System.out.println(s3);
String s4 = DateUtils.dateToString(date, s1);
System.out.println(s4);
String s5 = DateUtils.dateToString(date, s2);
System.out.println(s5);
Date date1 = DateUtils.StringToDate(s, "2018年02月10日 11:11:11");
System.out.println(date1);
}
}
输出结果:
2019年10月15日 17:58:35
2019-10-15
17:58:35
Sat Feb 10 11:11:11 CST 2018
4.Calendar
Calendar为某一时刻和一组日历字段之间提供了一些转化方法,并为操作日历提供了一些方法。
Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化
Calendar rightNow = Calendar.getInstance();
import java.util.Calendar;
public class Calendar_Demo0 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//多态调用
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
}
}
输出结果:
2019年10月15日
Calendar的常用方法
public int get(int field) //返回给定日历字段的值
public abstract void add(int field,int amount)//根据日历的规则,将指定的时间量添加或减去给定的日历字段
public final void set(int year,int month,int date)//设置当前的日历
import java.util.Calendar;
public class Calendar_Demo0 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//多态调用
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
System.out.println("--------------------");
//10年后的两个月零3天前
c.add(Calendar.YEAR,10);
c.add(Calendar.MONTH,-2);
c.add(Calendar.DATE,-3);
int year1 = c.get(Calendar.YEAR);
int month1 = c.get(Calendar.MONTH) + 1;
int date1 = c.get(Calendar.DATE);
System.out.println(year1 + "年" + month1 + "月" + date1 + "日");
System.out.println("---------------------");
c.set(2016,5,6);
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH) + 1;
int date2 = c.get(Calendar.DATE);
System.out.println(year2 + "年" + month2 + "月" + date2 + "日");
}
}
输出结果:
2019年10月15日
2029年8月12日
2016年6月6日
案例:从键盘输入一个年份,输出结果为该年份的2月共有多少天
public class Calendar_Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份: ");
int year = sc.nextInt();
Calendar c = Calendar.getInstance();
c.set(year, 2, 1);//表示设置时间为某年3月1日
c.add(Calendar.DATE, -1);
int date = c.get(Calendar.DATE);
System.out.println(year + "年的2月共有" + date + "天");
}
}
输出结果:
请输入年份:
2019
2019年的2月共有28天