指定星期数获取上周&本周以及下个星期第一天的时间戳

需求描述

指定星期数(本周1-7之间)获取上周、本周、下个星期第一天,总记15天的时间戳

有什么用?用在哪?我只能说懂得就懂(咳咳

注意,我们的需求是通过指定的星期数(比如今天星期三)来生成两周及下周一的数据

也就是要根据今天的日期数据(指定数据的区间是本周)转换为时间戳并在此基础上生成14条数据,并根据选定的星期数返回该星期数一天伊始的时间戳

需要知道的是一天的时间戳是:60(秒)*60(分钟)*24(小时)=86400(秒)

算法设计

这就肯定要编一个utils了,/utils/timeUtils

在其中我们先直接全局声明数组变量

static long[] weekTime=new long[15];

今天日期转换为时间戳

接着编写一个方法来获取今天的时间戳

//将时间转换为时间戳
public static long getDateTime(LocalDate date){
    LocalDate targetDate = date;
    // 将 LocalDate 转换为 Instant
    Instant instant = targetDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
    // 获取时间戳(秒数)
    long timestamp = instant.getEpochSecond();
    return timestamp;
}

获取今天的日期数

别忘了我们还有个长度为15的数组呢,在获取了今天的时间戳后,我们还需要指定这个时间戳放在什么位置上,这就是编写以下方法的原因(当然了这个确实没必要单独写一个方法,我是懒得改了...)

//解析当前时间,获知当前是星期几
public static int getTodayNum(){
    LocalDate date = LocalDate.now(); // 获取当前日期
    DayOfWeek dayOfWeek = date.getDayOfWeek(); // 获取当前星期数
    //System.out.println("今天是星期\t" + dayOfWeek.getValue()); // 输出"今天是星期几"
    return dayOfWeek.getValue();
}

填充时间数组

int i=getTodayNum();
LocalDate local=LocalDate.now();
long l= getDateTime(local);

在完成了以上两个步骤后,我们现在就获取到了两个数据,一个是今天的时间戳,一个是今天的星期数,接着我们就可以对weekTime赋予初值了,那么问题来了,我们能直接

weekTime[i]=l吗,这肯定不行的,我们需要获取的是上周、本周、下星期一的数据,而数组是从0开始计数的,那么我们的赋初值就应该是weekTime[i+6]=l

weekTime[i+6]=l;

在填充完今天的时间戳后,就开始填充[上周一——今天)的时间戳

今天的时间戳-(今天数据在数组中的位置-目前填充的时间)*每天86400

//首先填补今天以前的数据
for (int j = 0; j < i+6; j++) {
    weekTime[j]=l-(i+6-j)*86400;
}

接着是填充[明天——下星期一]的数据

今天的时间戳+(目前填充时间-(今天时间戳的数组位置))*每天86400

//填补今天往后的数据
for (int j = i+7; j <15 ; j++) {
    weekTime[j]=l+(j-i-6)*86400;
}

最后就是将填充完毕的weekTime返回了

public static long[] time_utils() {
    int i=getTodayNum();
    LocalDate local=LocalDate.now();
    long l= getDateTime(local);
    weekTime[i+6]=l;
    //首先填补今天以前的数据
    for (int j = 0; j < i+6; j++) {
        weekTime[j]=l-(i+6-j)*86400;
    }
    //填补今天往后的数据
    for (int j = i+7; j <15 ; j++) {
        weekTime[j]=l+(j-i-6)*86400;
    }
    
    return weekTime;
}

使用

算法已经完成了,我们已经把本周、上周、下星期一的每天的起始时间戳给添加进数组了,那么要做的也就是调用该utils获取指定星期数的时间戳了,例如:

long[] weekTime= timeUtils.time_utils();
System.out.println("上个星期的今天"+weekTime[day-1]+"\t上个星期的明天"+weekTime[day]+"\t今天"+weekTime[day+6]+"\t明天"+weekTime[day+7]);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值