Java practice日期练习

这篇博客介绍了如何在Java中生成1995年1月1日至12月31日之间的随机日期。通过两种方法实现,包括使用Date的过时方法和通过字符串转换。关键在于获取时间戳并进行随机操作,然后将随机时间戳转换回日期对象进行输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期

在这之前:需要说明的细节
1、对于Date d1=new Date(); 这个创建日期对象 d1是直接获得的本电脑现在的时间 做打印就可以看出来
2、要在规定的时间范围内1995.1.1 00:00:00 到 1995.12.31 23:59:59 怎样才能实现呢 单靠上述的创建对象很麻烦 要做减法
以下提供两种方法:
A、

 Date start=new Date(95,0,1,0,0,0);
        Date end=new Date(95,11,31,23,59,59);

这种是对其进行传参 因为Date这个类有这个方法
以下是Java源码:

  public Date(int year, int month, int date, int hrs, int min, int sec) {
        int y = year + 1900;
        // month is 0-based. So we have to normalize month to support Long.MAX_VALUE.
        if (month >= 12) {
            y += month / 12;
            month %= 12;
        } else if (month < 0) {
            y += CalendarUtils.floorDivide(month, 12);
            month = CalendarUtils.mod(month, 12);
        }
        BaseCalendar cal = getCalendarSystem(y);
        cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
        cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0);
        getTimeImpl();
        cdate = null;
    }

之前学习没学到这种方法 Date 功能还有很多 但是这个方法应该会被淘汰 (Deprecated)

B、利用字符串转换成日期

String startStr = "1995.1.1 00:00:00";
        String endStr = "1995.12.31 23:59:59";
 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
 
        Date start = sdf.parse(startStr);
        Date end = sdf.parse(endStr);

注意声明:import java.text.ParseException;
本题算法逻辑:
前面解决了如何 是现在在规定日期范围内进行运行
那么怎么做到随机呢——肯定的用到 Math.random() 之后乘以规定数据类型的数进行强转 这是一般思路 那里去找这个数 ——得靠Date这个类的方法getTime(); 它就可以获得从时间原点到规定时间一共经历多少 之后做加减法。

 long random = (long) (Math.random()*(end.getTime()-start.getTime())+start.getTime());
        System.out.println(new Date(random));

细节部分:
之后获得的长整型 random 只是数字 要转换为日期输出 还得调用 Date类里的方法——源码:

 public Date(long date) {
        fastTime = date;
    }

也就是—— System.out.println(new Date(random));
在new Date();这个括号里内容写法格式不一样 调用不同的方法

最简便的写法:

  long min = new Date(95, 1, 1, 0, 0, 0).getTime();
        long max = new Date(95, 12, 31, 59, 59, 59).getTime();
        long r = min + (long) (Math.random() * (max - min));
        System.out.println(new Date(r));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值