【特定日期格式转换】日期格式2024.1.1,1.2,1.3,1.4,1.5怎么转换为格式2024.1.1~1.5 星期一、星期二、星期三、星期四、星期五

本文主要是介绍【特定日期格式转换】日期格式2024.1.1,1.2,1.3,1.4,1.5怎么转换为格式2024.1.1~1.5 星期一、星期二、星期三、星期四、星期五,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题:

将日期格式2024.1.1,1.2,1.3,1.4,1.5怎么转换为格式2024.1.1~1.5 星期一、星期二、星期三、星期四、星期五

二、方案:

1、首先,将日期数字转换为星期几的名称。这可以通过使用Zeller公式直接查找日历来完成。对于2024年1月的日历,1月1日是星期二,因此我们可以推断出:

1月1日(2024.1.1)是星期二

1月2日(2024.1.2)是星期三

1月3日(2024.1.3)是星期四

1月4日(2024.1.4)是星期五

1月5日(2024.1.5)是星期六

2、接着,将日期范围表示为起始日期和结束日期,并用波浪号(~)连接。

3、最后,将转换后的星期几名称附加在日期范围后面

三、蔡勒公式

蔡勒公式(Zeller's congruence)是一个根据日期计算星期的算法,具体步骤如下:

  1. 确定年份:应考虑年份是否为闰年,以及日期是否在闰年中。
  2. 确定月份:对于1月和2月,应将其视为上一年的13月和14月来进行计算。
  3. 应用公式:蔡勒公式的基本形式是 

    h = (q + [(13(m+1))/5] + K + [K/4] + [J/4] + 5*J) mod 7

    其中:

  4. h:表示星期几(0=星期六,1=星期日,2=星期一,...,6=星期五)
  5. q:表示日期中的日
  6. m:表示月份(3=3月,4=4月,...,14=2月,15=1月)
  7. K:表示世纪内的年份(即年份的后两位数)
  8. J:表示世纪(即年份的前两位数)
  9. 计算结果:将得到的w值对7取余数,得到的结果即为星期几。

此外,如果计算的日期是在1582年10月4日或之前,需要使用修正的蔡勒公式,因为这是格里高利历法开始使用的日期。

总的来说,蔡勒公式是一种利用世纪、年份、月份和日期的信息,通过一系列的计算得出日期对应的星期数的方法。它基于公历的置闰规则来考虑,并且原点是公元元年12月31日。

蔡勒公式java示例代码

public class ZellerFormula {public static void main(String[] args) {int day = 1;int month = 1;int year = 2022;System.out.println("The day of the week is: " + getDayOfWeek(day, month, year));}public static String getDayOfWeek(int day, int month, int year) {if (month < 3) {month += 12;year -= 1;}int K = year % 100;int J = year / 100;int h = (day + 13 * (month + 1) / 5 + K + K / 4 + J / 4 + 5 * J) % 7;String[] daysOfWeek = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};return daysOfWeek[h];}
}

四、Java实现

可以使用Java的SimpleDateFormat类和Calendar类来将日期字符串转换为星期几,然后拼接成所需的格式

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class Main {public static void main(String[] args) {String[] dateStrs = {"2024.1.1", "1.2", "1.3", "1.4", "1.5"}; // 输入的日期字符串数组SimpleDateFormat sdf = new SimpleDateFormat("yyyy.M.d");StringBuilder result = new StringBuilder();for (String dateStr : dateStrs) {try {Date date = sdf.parse(dateStr);Calendar calendar = Calendar.getInstance();calendar.setTime(date);int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};result.append(weekDays[dayOfWeek - 1]).append("、");} catch (Exception e) {e.printStackTrace();}}result.deleteCharAt(result.length() - 1); // 删除最后一个逗号System.out.println("输入的日期是:" + dateStrs[0] + "~" + dateStrs[dateStrs.length - 1] + ",对应的星期是:" + result.toString());}
}

这篇关于【特定日期格式转换】日期格式2024.1.1,1.2,1.3,1.4,1.5怎么转换为格式2024.1.1~1.5 星期一、星期二、星期三、星期四、星期五的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896136

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

usaco 1.3 Calf Flac(暴搜)

思路是暴搜。 需要注意的地方是输入的方法,以及输出时的换行。 代码: /*ID: who jayLANG: C++TASK: calfflac*/#include<stdio.h>#include<string.h>#include<math.h>int main(){freopen("calfflac.in","r",stdin);freopen("calfflac.ou

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个