Date(总结完整)

Idea测试在反射模块中

1、第一代日期 Date(重点)

  • java.util.Date包下

2. 获取当前时间

//获取当前系统时间,默认的输出日期格式是国外的,因此需要对格式进行转换
Date d1 = new Date();
System.out.println("国外格式:"+d1);
FormatDate(d1);

3. 格式化时间

//格式转化 创建SimpleDateFormat可以指定相应的格式
//y年  M月  d天     E是星期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(date);
System.out.println("转化格式:"+format);

4. 将毫秒转化为时间

//将毫秒数转化成对应的时间
Date d2 = new Date(12345679);
System.out.println(d2);
FormatDate(d2);

5. 将格式化后的字符串转化为Date

//可以将一个格式化的字符串转成对应的Date
String s = "1999年01年01月 10:13:12 星期一";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
try {
    Date d3 = sdf.parse(s);
} catch (ParseException e) {
    e.printStackTrace();
}

2、Mysql 和 java sql转化(重点)

在SMBMS项目的练习中遇到这样一个问题!
通过指定时间段内的总金额!

sql语句很简单,应该是

<select id="statistics" parameterType="java.sql.Date" resultType="float">
    select sum(totalPrice) from smbms_bill where (creationDate between #{d1} and #{d2}) and isPayment = 2
</select>

同时返回的值应该封箱未Float,因为如果没有找到的话会返回null,报空指针异常

当然进入到本文正题,传入的是一个 java.sql.Date ,而前端传来的应该是 java.util.Date或者String,改如何转化?

以下是Date的总结

public class TimeTest {

    public static void main(String[] args) {
        Date date = new Date();  

        //      一、获取当前系统时间和日期并格式化输出:
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String dateTime = df.format(date); // Formats a Date into a date/time string.
        System.out.println(dateTime);  // 2017-09-24 23:33:20

        //      二、Date转换为Datetime
        long longTime = date.getTime();
        Timestamp timestamp = new Timestamp(longTime);
        System.out.println(timestamp); // 2017-09-24 23:33:20.655

        //      三、String转换为Date
        String strTime = "2017-09-24 12:00:01";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = null;
        try {
            date1 = sdf1.parse(strTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date1); // Sun Sep 24 12:00:01 CST 2017

        //      四、Date转换为String
        Date date2 = new Date();
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String str1 = format.format(date2);
        System.out.println(str1); // 2017-09-24

        //      五、String转化为java.sql.Date
        String str2 = "2017-12-01";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        java.sql.Date sDate = null;
        try {
            java.util.Date date3 = sdf2.parse(str2);
            sDate = new java.sql.Date(date3.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(sDate); // 2017-12-01

    }

}

java.util.Date --> java.sql.Date getTime()方法

java.sql.Date sDate = new java.sql.Date(java.util.Date.getTime());

3、第二代日期 Calendar (很垃圾,线程不安全)

  • Calendar 是一个抽象类, 并且构造器是private
  • 可以通过 getInstance() 来获取实例
  • Calendar 提供了大量的方法和字段 提供使用
  • Calender 没有专门化的格式方法,所以需要程序员自己来组合显示
  • 日期12进制,还需要修改
public class Calendar02 {

    public static void main(String[] args) {
        //抽象类,构造方法私有,只能通过方法获取
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        System.out.println("年:"+c.get(Calendar.YEAR));
        //月需要加1,因为从零开始编号
        System.out.println("月:"+c.get(Calendar.MONTH+1));
        System.out.println("小时:"+c.get(Calendar.HOUR));
    }

}

4、第三代 LocalDate LocalTime LocalDateTime

1. LocalDate :只包含日期(年月日)

2. LocalTime:只包含时间(时分秒)

3. LocalDateTime:包含日期+时间

public class LocalDateTime03 {

    public static void main(String[] args) {

        //使用now表示当前日期时间的 对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        System.out.println(ldt.getYear());
    }

}

格式化日期

//格式化时间 使用DateTimeFormatter 对象来格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
String format = dtf.format(ldt);
System.out.println(format);

5、时间戳和Date的转化

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值