关于时间戳的理解
时间戳是long类型
时间戳默认显示为毫秒数
1秒= 1000毫秒
获取当前时间的方法:
long now = System.currentTimeMillis();
字符串Date互转
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date);
Date parse = sdf.parse(dateString);
Date获取时间戳
long date = parse.getTime();
格式化
提油单管理继续进行,昨天实体的问题结果是放弃多表查询,改成提货,发货单位名称。
在完成时,主要2个新问题,一个是校验三个参数,使用ajax请求,同时传入参数,在后台校验返回结果即可;
第二个问题是提油单编号的问题,编号是拼接的字符串,效果是每增加一个提油单,编号是今天的日期+001,今天的日期+002,而到第二天要从新的001开始;
本来以为要定义常量来递增,其实实现是非常简单的,通过当前日期查询对象,有N个对象就是00N,这样就可以解决当前日期查询,而第二天查询有从新的00N开始,这里有个bug事当用户删除数据后,会出现重复排序,所以改变service,给查询进行排序,拿到最大的00N,然后再最大的基础上递增;新的问题是当超过10个后,怎么正确显示010;或者说怎么正确的显示000问题,百度一下的结果是
DecimalFormat format = new DecimalFormat("000");// 定义一种输出格式为000
下面代码
//编码值
public String OrderNumber(String data) throws Exception{
String orderNumber = null;
try {
//去掉日期中-
String newData = data.replace("-", "");
//数据库查询
List<OilTiTrain> oilTiTrains = oilTiTrainService.getOilTiTrainsByData(data);
if (oilTiTrains.size() > 0) {
OilTiTrain oilTiTrain = oilTiTrains.get(0);
String number = oilTiTrain.getOrdersNumber();
//获取个数count
int count = Integer.parseInt(number.substring(8))+1;
//格式化
DecimalFormat format = new DecimalFormat("000");// 定义一种输出格式为000
//拼接字符串
orderNumber = newData + format.format(count);
}else {
orderNumber = newData + "001";
}
} catch (Exception e) {
e.printStackTrace();
}
//返回正确的值
return orderNumber;
}
}
2024-07-02
计算下个月的昨天
从数学角度来看我先今天-1天+1月和先+1月再-1天应改是一样的,但是时间计算存在问题:
//如果zoneDateTime是7月1号
zonedDateTime.plusMonths(1).minusDays(1) //返回7月31号
zonedDateTime.minusDays(1).plusMonths(1) //返回7月30号
//如果zoneDateTime是8月31号
zonedDateTime.plusMonths(1).minusDays(1) //返回9月29号
zonedDateTime.minusDays(1).plusMonths(1) //返回9月30号
计算2个时间相差几个月
按我们的理解来看 2024-07-31和2025-06-30应该相差11个月
localDateTime1 = DateTimeUtils.parseLocalDateTime("2024-07-31 23:59:59");
localDateTime2 = DateTimeUtils.parseLocalDateTime("2025-06-30 23:59:59");
long between = ChronoUnit.MONTHS.between(DateTime, zone11); //output 10