Java 已知开始时间以及间隔时间,求结束时间

背景

由于在项目中拿到的数据:
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类中的方法
Date类的方法

思考

在大量此类的转换下,放在前端实现更好还是后端实现更好?

如果转换计算放在前端,展示数据的也面是否可能会延迟?
肯定是可以在后端实现,但是此时考虑一个安全性的问题。【对时间戳不是很了解】貌似用时间戳的形式存更安全,但是所做项目不能在公网使用,所以或许可以不用考虑这个安全问题。

结论:放在后端实现时间的转换

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值