- 粒度精确到天
有时候我们的日期只需要精确到天,比如数据库的索引中使用到了日期,更新的时候很难于原来的日期匹配上,尤其是联合索引中的时候(要不然就需要在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());
- 格式化
将字符串和日期相互转换
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 将字符串反序列化为日期
format.parse("2020-09-12");
// 将日期序列化为字符串
format.format(new Date());
- 日期加减
前一天:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
- 比较时间
targetDate.before(standDate);
- 只比较分钟
原理是将天重置为相同的日期。当然了,如果只需要比较天,那么把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);
- @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")));
}
}
日常积累,持续更新!