背景
由于在项目中拿到的数据:
1.开始的参考时间,如,形式是“1970-01-01”
2.间隔的时间,单位为天,如24725.088天
需求
以“年-月-日”的形式给出结束时间
由于只需要给出天,所以可以忽略给的间隔数中的小数点后的数值。即直接对给的间隔数取整,不必四舍五入。
这里给出两种实现方法。
package com.tree_;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
// Date d=new Date();
日期的形式
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// Date da1=sdf.parse("1950-01-01");
// System.out.println(d.getDay()-da1.getDay());
// 方法一
// 设置输入日期的格式 年-月-日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 开始的日期
Date startDate = sdf.parse("1970-01-01");
// 日历对象实例
Calendar cal = Calendar.getInstance();
// 在日历对象上设置开始日期
cal.setTime(startDate);
// 需要增加的天数
int addDay = 24725;
// 在日历对象上增加需要增加的天数,增加的天数需要是整数
cal.add(Calendar.DAY_OF_MONTH, addDay);
// 从日历对象上获取日期
Date endDate = cal.getTime();
// 根据之前设定的日期格式,修改输出增加天数后的日期
System.out.println(sdf.format(endDate));
通过日期获取毫秒值
// long startTime=startDate.getTime();
相隔时间由天数转换为秒数
// double addDay1=24725.08831;
// double diffTime=addDay1*24*60*60;
// double endTime=startTime+diffTime;
//方法二
double addDay1 = 24725.08831;
// 将开始日期转换为Instant对象
Instant startInstant = startDate.toInstant();
// 通过Instant对象,在开始日期的Instant对象上加上需要加上间隔数(可以是以小时为单位,也可以以天为单位,以天为单位时,间隔数类型是long)
// 第一个参数表示药添加的间隔数,第二个表示间隔数的单位, 这里以天为单位
Instant endInstant = startInstant.plus((long) addDay1, ChronoUnit.DAYS);
// 将加上间隔数后的Instant对象转为Date日期对象
Date endDate1 = Date.from(endInstant);
// 将日期对象转换为自己需要的日期格式输出,注意,转格式之后的数据类型是String
String format = sdf.format(endDate1);
// System.out.println(endDate1.getClass());
System.out.println(format);
}
}
结果:
分析与总结
1.两种方法都需要借助创建非Date对象实现,需要另外的空间。考虑是否对程序的运行有影响
2.查看Date类的方法,目前没有找到可以不借助其他对象,但直接调用方法【即代码较为简洁】实现这个功能的方法。
4.Date类中的方法
思考
在大量此类的转换下,放在前端实现更好还是后端实现更好?
如果转换计算放在前端,展示数据的也面是否可能会延迟?
肯定是可以在后端实现,但是此时考虑一个安全性的问题。【对时间戳不是很了解】貌似用时间戳的形式存更安全,但是所做项目不能在公网使用,所以或许可以不用考虑这个安全问题。
结论:放在后端实现时间的转换