Date类:获取Unix时间戳以及将与年-月-日-时-分-秒的互换
Calendar类:除了可以获得时间外可以做日期加减法,也不需要考虑闰年
Date类:
package com.hb2.Arrays_System_Obeject_Math_Data_Integ.Data类;
/*
public Date(), 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Data(long data), 分配一个Date对象,并将其初始化为表示从基准时间起指定的毫秒数
*/
public class Date {
public static void main(String[] args) {
java.util.Date d1 = new java.util.Date();
System.out.println(d1);
// 输出: Fri Apr 22 19:32:08 CST 2022
// CST 中国标准时间
// 说明它的toString被重写了,原本是:全路径名@地址
long Date = 1000 * 60 * 60;//一小时
java.util.Date d2 = new java.util.Date(Date);
System.out.println(d2);
//输出: Thu Jan 01 09:00:00 CST 1970 (东八区,加了8小时)
//*常用方法*
//public long getTime(), 获取的日期对象是从1970.1.1 00:00:00到现在的毫秒值
//public void setTime(long time), 设置时间,给的是毫秒值
java.util.Date d = new java.util.Date();
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//输出:52.34106828776636年
java.util.Date D = new java.util.Date();
long time = 1000*60*60;
D.setTime(time);
System.out.println(D);
//输出:Thu Jan 01 09:00:00 CST 1970
}
}
SimpleDateFormat:
package com.hb2.Arrays_System_Obeject_Math_Data_Integ.Data类;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
SimpleDateFormat是一个具体类,用于以区域设置敏感的方式格式化和解析日期
常用:
y 年
M 月
d 日
H 时
m 秒
s 秒
构造方法:
public SimpleDateFormat(), 使用默认模式和日期格式
public SimpleDateFormat(String pattern), 使用给定的模式和日期格式
格式化(从 Date 到 String):
public final String format(Date date), 将日期格式化成日期/时间字符串
解析(从 String 到 Date):
public Date parse(String source), 从给定字符串的开始解析文本以生成日期
*/
public class 日期SimpleDateFormat {
public static void main(String[] args) throws ParseException {
Date d = new Date();
System.out.println(d);
//格式化:从 Date 到 String
SimpleDateFormat sdf = new SimpleDateFormat();
String s = sdf.format(d);
System.out.println(s);
//2022/4/22 下午8:23
//SimpleDateFormat d2 = new SimpleDateFormat("y年 M月d日 H:m:s");
SimpleDateFormat d2 = new SimpleDateFormat("yyyy年 MM月dd日 HH:mm:ss");//?
String s2 = d2.format(d);
System.out.println(s2);
//2022年 04月22日 20:34:06
//解析:从 String 到 Date
String ss = "2048-08-09 11:11:11";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//?
Date dd = sdf2.parse(ss);//报错,异常,先用alt+enter,选第一个,为抛出异常(开发多是第二个?)
System.out.println(dd);
}
}
日期工具类:
//Demo类
package com.hb2.Arrays_System_Obeject_Math_Data_Integ.日期工具类;
import java.text.ParseException;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws ParseException {
Date d = new Date();
String s1 = DateUtils.DatetoString(d, "y年M月d日 H:m:s");
System.out.println(s1);
String s2 = DateUtils.DatetoString(d, "y年M月d日");
System.out.println(s2);
String s = "2022-08-01 11:11:11";
Date dd = DateUtils.StringtoDate(s, "y-M-d H:m:s");
System.out.println(dd);
}
}
//DateUtils类
package com.hb2.Arrays_System_Obeject_Math_Data_Integ.日期工具类;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
工具类:
!构造方法私有!
!成员方法静态!
*/
public class DateUtils {
private DateUtils() {
}
/*
把日期转为指定格式的字符串
返回值类型: String
参数:Date date, String format
*/
public static String DatetoString(Date date, String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(date);
return s;
}
/*
把日期解析为指定格式的日期
返回值类型:Data
参数:String s, String format
*/
public static Date StringtoDate(String s, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
Calendar类:
package com.hb2.日期类.Calendar;
import java.util.Calendar;
/*
Calendar(抽象类,不可直接实例化,通过子类实例化)为某一时刻和一组
日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar提供了一个类方法, getInstance 用于获取Calendar对象,其
日历字段已使用当前日期和时间初始化
Calendar rightNow = Calendar.getInstance();
*/
public class Demo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();//多态的形式
System.out.println(c);
//public int get (int field), 返回给定日历字段的值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MARCH)+1;//从0开始,所以要+1
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
}
}
//常用方法
package com.hb2.日期类.Calendar;
import java.util.Calendar;
/*
public abstract void add (int field, int amount), 根据
日历的规则,将指定的时间两添加或减去给定的日历字段
public final void set (int year, int month, int date),
设置当前日历的年月日
*/
public class 常用方法 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();//多态的形式
//public int get (int field), 返回给定日历字段的值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MARCH)+1;//从0开始,所以要+1
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//2022年4月22日
Calendar c2 = Calendar.getInstance();//多态的形式
//三年前的今天
c2.add(Calendar.YEAR, -3);//年份-3
int year2 = c2.get(Calendar.YEAR);
int month2 = c2.get(Calendar.MARCH)+1;//从0开始,所以要+1
int date2 = c2.get(Calendar.DATE);
System.out.println(year2+"年"+month2+"月"+date2+"日");
//2019年4月22日
Calendar c3 = Calendar.getInstance();
c3.set(2011,11,11);
int year3 = c3.get(Calendar.YEAR);
int month3 = c3.get(Calendar.MARCH)+1;//从0开始,所以要+1
int date3 = c3.get(Calendar.DATE);
System.out.println(year3+"年"+month3+"月"+date3+"日");
//2011年12月11日
}
}
求二月天数:
package com.hb2.日期类;
import java.util.Calendar;
import java.util.Scanner;
public class 二月天 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入年份:");
int year = in.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(date);
}
}