点滴-Java8的日期类

本文介绍了Java8中的日期类使用,包括LocalDate.now()不是享元对象,BASIC_ISO_DATE格式转换,Period处理日期间隔,以及java.sql.Date和java.util.Date的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java8的日期类不熟悉啊,几个小姿势记录一下。

1.LocalDate.now()不是享元

yqj2065要大量创建LocalDate对象,所以要自定义一个MyDate, public static final LocalDate today = LocalDate.now();

        LocalDate d1 =LocalDate.now();
        LocalDate d2 =LocalDate.now();
        System.out.println(d1==d2); // false,操蛋

2.BASIC_ISO_DATE

today.format(DateTimeFormatter.ISO_DATE)为字符串 "2015-11-21",要得到"20151121",可以

        String dateStr = date.format(DateTimeFormatter.ISO_DATE);//BASIC_ISO_DATE
        String[] d = dateStr.split("-");
        String yyyymmdd = "";
        for (String s : d) {
            yyyymmdd += s;
        }
        return yyyymmdd;
但是有现成的,today.format(DateTimeFormatter.BASIC_ISO_DATE)!尴尬

3.Period

Period中,天数只管天数。

        LocalDate from = MyDate.today;
        LocalDate to = from.plusDays(50);//LocalDate.of(2016, 1, 10);
        Period period = from.until(to);
        System.out.println(from + "  " + to + "  " + period.getDays());
有大量文件如log20151121,yqj2065要循环找到[from,to]的文件,用下面的代码:

        LocalDate from = MyDate.today;
        LocalDate to = LocalDate.of(2015, 11, 25);          
        List<String> fileNames = new ArrayList<>();
        while(from.isBefore(to.plusDays(1))){//to]
            String fileName = "log" +from.format(DateTimeFormatter.BASIC_ISO_DATE);;
            fileNames.add(fileName);
            from = from.plusDays(1);
        }
        fileNames.stream().forEach((s) -> {
            System.out.println(s);
        });
log20151121
log20151122
log20151123
log20151124
log20151125

不知道有没有其他的方式。

4.java.sql.Date

拼接sql:
String sql = "select  * from xxx where "
                + " pin= " + boxResult.getPin() + "  AND sn= " + boxResult.getSn()
                + "  AND date= '" + boxResult.getDate() + "'";

PreparedStatement:
            String condition = "insert into  xxx(orderID,customerID,pin,sn,date,outDate) values(?,?,?,?,?,?)";
            PreparedStatement ps = MySQLConn.conn.prepareStatement(condition);
            ps.setString(1, order.getOrderID());
            ps.setInt(2, order.getCustomer().getCustomerID());
            ps.setInt(3, qrCode.getPin());
            ps.setInt(4, qrCode.getSN());
            ps.setDate(5, java.sql.Date.valueOf(qrCode.getDate()));
            ps.setDate(6, java.sql.Date.valueOf(order.getOutDate()));
这个setDate(int parameterIndex, java.sql.Date x) 有点讨嫌。为什么不提供重载的setDate(int parameterIndex, LocalDate date) ?

5.java.util.Date

老代码会遇到java.util.Date,例如使用org.jdesktop.swingx.JXDatePicker时。java.util.Date的等价物为Instant,
Date date= new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值