1 日期和时间格式化
1.1使用DateForam格式化
java提供了预定义的日期格式,预定义的日期格式可以满足绝大多数的场景需要。
格式化日期需要两步:
1、通过DateFormat.getDateInstance() 获取一个DateFormat对象。
2、调用DateFormat对象的format方法返回一个String类型的日期。
DateFormat抽象类满足了大部分的时间显示需求,其提供了三个获取实例对象的方法:
DateFormat dateft= DateFormat.getDateInstance();
System.out.println(dateft.format(new Date()));
2021年7月28日
DateFormat dateft2=DateFormat.getTimeInstance();
ystem.out.println(dateft2.format(new Date()));
下午8:54:23
DateFormat dateft3=DateFormat.getDateTimeInstance();
System.out.println(dateft3.format(new Date()));
2021年7月28日下午8:54:23
在通过DateFormat.getDateInstance()创建实例时使用了默认的日期格式化样式,DateFormat还提供了其他格式化样式。
简单示例
DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.LONG);
DateFormat timeInstance = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(dateInstance.format(new Date()) +" "+timeInstance.format(new Date()));
输出结果
2021年7月29日 下午06时28分40秒
1.2使用printf格式化日期
printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
}
以上实例编译运行结果如下:
全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012
年-月-日格式:2012-09-10
月/日/年格式:09/10/12
HH:MM:SS PM格式(12时制):10:43:36 上午
HH:MM:SS格式(24时制):10:43:36
HH:MM格式(24时制):10:43
1.3自定义日期格式化SimpleDateFormat
演示用例
Date newTime = new Date();
//设置时间格式
SimpleDateFormat sdf1 = new SimpleDateFormat("y-M-d h:m:s a E");
SimpleDateFormat sdf2 = new SimpleDateFormat("yy-MM-dd hh:mm:ss a E");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MMM-ddd hhh:mmm:sss a E");
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyyy-MMMM-dddd hhhh:mmmm:ssss a E");
//获取的时间,是本机的时间
String formatDate1 = sdf1.format(newTime);
String formatDate2 = sdf2.format(newTime);
String formatDate3 = sdf3.format(newTime);
String formatDate4 = sdf4.format(newTime);
System.out.println(formatDate1);
System.out.println(formatDate2);
System.out.println(formatDate3);
System.out.println(formatDate4);
运行结果
2021-7-29 2:29:42 下午 周四
21-07-29 02:29:42 下午 周四
2021-7月-029 002:029:042 下午 周四
02021-七月-0029 0002:0029:0042 下午 周四
SimpleDateFormat中的parse方法可以
把String型的字符串转换成特定格式的date类型
public static void main(String[] args) {
String dStr = "2001.12.12-08:23:21";
Date d = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd-HH:mm:ss");
try {
d = sdf.parse(dStr);
} catch (ParseException pe) {
System.out.println(pe.getMessage());
}
System.out.println(d);
System.out.println(d.getTime());
}
2.日历类 Calendar 的使用
创建 Calendar 对象
Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象, 得到的 Calendar 由当前时间初始化.
Calendar cal=Calendar.getInstance();
配合自定义格式化类一起使用
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar date = Calendar.getInstance();
System.out.println(sdf.format(date.getTime()));
对日期进行操作 设置和获取
1 cal.set (2021, 5, 4, 13, 44, 51);//年月日时分秒 (月份0代表1月)
2 cal.set (Calendar.YEAR, 2020);//年
3 cal.set (Calendar.MONTH, 7);//月 (月份0代表1月)
4 cal.set (Calendar.DATE, 11);//日
5 cal.set (Calendar.HOUR_OF_DAY, 15);//时
6 cal.set (Calendar.MINUTE, 33);//分
7 cal.set (Calendar.SECOND, 32);//秒
cal.get (Calendar.YEAR);//年
cal.get (Calendar.MONTH) + 1;//月 (必须要+1)
cal.get (Calendar.DATE);//日
cal.get (Calendar.HOUR_OF_DAY);//时
cal.get (Calendar.MINUTE);//分
cal.get (Calendar.SECOND);//秒
cal.get (Calendar.DAY_OF_WEEK);//星期 (Locale.ENGLISH情况下,周日是1,剩下自
//获取几点, 其中Calendar.HOUR代表12小时制, Calendar.HOUR_OF_DAY代表24小时制
int hour = cal.get(Calendar.HOUR);
//获取上午下午
int moa=cal.get(Calendar.AM_PM);
System.out.println(moa == 1 ? “下午” : “上午”);
获取当前时间毫秒数的方法
通常获取当前时间的毫秒数的三种方法,
- new Date.getTime .
- System.currentTimeMillis(),
- Calendar calendar = Calendar.getInstance();
long time = calendar.getTimeInMillis();
System.out.println(del.getTime());//获取当前时间
Thu Jul 29 09:12:02 CST 2021 //结果
roll ()和add()的区别
roll()和add()是把时间进行加减运算
下面第一行代码把月份回到11月前 不会影响年份
第二行代码如果月份不够年份减少1
例如 2021年10月用roll()是2021年1月;用add()是2020年2月
cal.roll(Calendar.MONTH, -11);
cal.add(Calendar.MONTH, -11);
计算两个时间的天数差
- //分别得到两个时间的毫秒数
- long sl=startday.getTimeInMillis();
- long el=endday.getTimeInMillis();
- long ei=el-sl;
- //根据毫秒数计算间隔天数
- return (int)(ei/(1000x60x60x24));
calendar.clear();//避免继承当前系统的时间
String转换为Calendar
/**先创建时间*/
String Time="2020-9-5 18:54";
/**new一个SimpleDateFormat,并且添加日期格式*/
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH-mm");
/**new一个Calendar*/
Calendar c=Calender.getInstance();
/**
S.parse(Time)是一个Date值
C.setTime见Date转换为Calendar
*/
c.setTime(s.parse(Time));
Calendar转String
String Time2=s.format(c.getTime());