java 日期相关

  1. 粒度精确到天
    有时候我们的日期只需要精确到天,比如数据库的索引中使用到了日期,更新的时候很难于原来的日期匹配上,尤其是联合索引中的时候(要不然就需要在sql中使用DATE_FORMAT(t1.data_time, '%Y-%m-%d')进行转化)。这时候我们需要数据库里的日期粒度为天
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;

Date date = Date.valueOf(LocalDate.now());
  1. 格式化
    将字符串和日期相互转换
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 将字符串反序列化为日期
format.parse("2020-09-12");
// 将日期序列化为字符串
format.format(new Date());
  1. 日期加减
    前一天:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
  1. 比较时间
	targetDate.before(standDate);
  1. 只比较分钟
    原理是将天重置为相同的日期。当然了,如果只需要比较天,那么把HH:mm重置为一样就可以了
	//重置年月日,只比较HH:mm
    targetDate = new DateTime(targetDate).withDate(1970, 1, 1).toDate();
    standDate = new DateTime(new Date()).withDate(1970, 1, 1).toDate();
	targetDate.before(standDate);
  1. @JsonSerialize
    @JsonSerialize(using = NetDateSerializer.class)
    @JsonDeserialize(using = NetDateDeserializer.class)
    private Date date;

/**
 * 实现日期反序列化
 **/
public class NetDateDeserializer extends JsonDeserializer<Date> {
    
    public NetDateDeserializer() {}
    
    public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    	Date date = process(jp.getText())  //真正实现转日期的地方
        return date
    }
}

/**
 * 实现日期序列化
 **/
public class NetDateSerializer extends JsonSerializer<Date> {
    private static final String FORMAT_TEMPLATE = "yyyy.MM.dd";
    private static final String TIME_ZONE_ID = "Asia/Shanghai";

    public NetDateSerializer() { }

    public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
        jgen.writeString(DateFormatUtils.format(value, "yyyy.MM.dd", TimeZone.getTimeZone("Asia/Shanghai")));
    }
}

日常积累,持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值