Java日期时间格式化 DateForam类 SimpleDateFormat类 Calendar类详解

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()));
2021728DateFormat dateft2=DateFormat.getTimeInstance();
ystem.out.println(dateft2.format(new Date()));
下午8:54:23 
DateFormat dateft3=DateFormat.getDateTimeInstance();
System.out.println(dateft3.format(new Date()));
2021728日下午8:54:23

在通过DateFormat.getDateInstance()创建实例时使用了默认的日期格式化样式,DateFormat还提供了其他格式化样式。
image-20210729135641063
image-20210729135756675

简单示例

DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.LONG);
DateFormat timeInstance = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(dateInstance.format(new Date()) +" "+timeInstance.format(new Date()));

输出结果

2021729日 下午062840

1.2使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

image-20210728211619265

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

image-20210729140744404

演示用例

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 ? “下午” : “上午”);

获取当前时间毫秒数的方法

通常获取当前时间的毫秒数的三种方法,

  1. new Date.getTime .
  2. System.currentTimeMillis(),
  3. 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);

计算两个时间的天数差

  1. //分别得到两个时间的毫秒数
  2. ​ long sl=startday.getTimeInMillis();
  3. ​ long el=endday.getTimeInMillis();
  4. ​ long ei=el-sl;
  5. //根据毫秒数计算间隔天数
  6. ​ 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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值