java 一年有多少周_java里面如何知道某一天是一年中的第几周

一位Java初学者分享了自己编写的一个简单程序——恋爱天数计算器,该程序能够计算并显示用户输入的恋爱天数对应的月数、周数和天数。

展开全部

作者:小怪

链接:https://zhuanlan.zhihu.com/p/24854302

来源:知乎

著作权归作者所有。商业转载32313133353236313431303231363533e59b9ee7ad9431333366306464请联系作者获得授权,非商业转载请注明出处。

鄙人是一名java初学者,也就学了一点点,但是这一点点就让我激动不已,测试恋爱天数是多少月多少周余多少天,我人生的第一个java程序就这么诞生了!继续努力了,开始奋斗开始学习!贴出来程序的代码!

import java.util.Scanner;

public class lianxi1{

public static void main(String[]args){

Scanner lianai=new Scanner(http://System.in);

System.out.println("请输入您的姓名:");

String name1=lianai.next();

System.out.println("请输入对方姓名:");

String name2=lianai.next();

System.out.println("恋爱天数:");

int tianshu=lianai.nextInt();

System.out.println(name1+name2+"天长地久");

int F=tianshu;

int G=F/7;

int H=F%7;

System.out.print(name1+"与"+name2+"相恋了"+G+"周");

System.out.println("  余"+H+"天");

int I=F/30;

int J=F%30;

int K=J/7;

int L=J%7;

System.out.print(name1+"与"+name2+"相恋了"+I+"月");

System.out.print("  余"+K+"周");

System.out.println("  余"+L+"天");

}

}

老司机带你分析SpringMVC框架设计原理与实现

链接:

密码:57w4

Netty粘包分包现象及解决方案实战,防socket攻击

链接:

密码:dk9n

大型企业级高并发下数据库水平切分之读写分离技巧详解

链接:

密码:ri8q

分布式事务出现场景及解决方案详细剖析

链接:

密码:380p

以上都是小编收集了大神的灵药,喜欢的拿走吧!喜欢小编就轻轻关注一下哦!

Java 中,有多种方法可以判断某一日期是一年中的几周,以下为几种常见的实现方式: ### 使用 `Calendar` 类 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekByDate { public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time = "2022-01-06"; Date parse = simpleDateFormat.parse(time); Calendar calendar = Calendar.getInstance(); // 设置星期一为一开始的第一天 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 设置在一年中第一个星期所需最少天数 calendar.setMinimalDaysInFirstWeek(0); calendar.setTime(parse); int week = calendar.get(Calendar.WEEK_OF_YEAR); System.out.println(week); } } ``` 在上述代码里,借助 `Calendar` 类来判断指定日期是一年中的几周。首先,把日期字符串转换为 `Date` 对象,接着对 `Calendar` 的属性进行设置,最后调用 `get(Calendar.WEEK_OF_YEAR)` 方法获取数。不过要留意,美国是以日作为每的第一天,若要以一作为每的第一天,需要对 `setFirstDayOfWeek` 方法进行设置 [^1][^3]。 ### 使用 `LocalDate` 和 `WeekFields` ```java import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.Locale; public class WeekOfYearExample { public static void main(String[] args) { // 获取当前日期 LocalDate today = LocalDate.now(); // 使用 ISO 标准定义获取数(一为一的第一天,第一至少有 4 天) int weekNumber = today.get(WeekFields.ISO.weekOfYear()); // 或者使用特定地区的定义(例如美国,日为一的第一天) // int weekNumber = today.get(WeekFields.of(Locale.US).weekOfYear()); System.out.println("当前日期: " + today); System.out.println("今天是这一年的第 " + weekNumber + " "); } } ``` 这段代码利用 `LocalDate` 和 `WeekFields` 来获取当前日期是一年中的几周。`WeekFields.ISO.weekOfYear()` 按照 ISO 8601 标准获取数,该标准里一是一的第一天,第一是包含当年至少 4 天的第一个星期;也能够使用 `WeekFields.of(Locale.US)` 等地区特定的定义 [^2]。 ### 使用 `Calendar` 类处理特殊情况 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekByDateWithSpecialCase { public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time = "2022-01-06"; Date parse = simpleDateFormat.parse(time); Calendar calendar = Calendar.getInstance(); // 设置星期一为一开始的第一天 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 设置在一年中第一个星期所需最少天数 calendar.setMinimalDaysInFirstWeek(0); calendar.setTime(parse); int week = calendar.get(Calendar.WEEK_OF_YEAR); System.out.println(week); if (week == 1 && parse.getMonth() == 11) { calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 7); Date pastDate = calendar.getTime(); String result = simpleDateFormat.format(pastDate); System.out.println(result); week = calendar.get(Calendar.WEEK_OF_YEAR) + 1; System.out.println(week); } } } ``` 此代码同样使用 `Calendar` 类,并且处理了一些特殊情况,像 12 月最后一被计算到下一年的情况 [^3]。 ### 封装为函数 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekUtils { /** * 转化指定日期,哪一年几周 * @param dateStr * @return */ public static String getWeeksInMonthOfDate(String dateStr) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setMinimalDaysInFirstWeek(4); calendar.setTime(dateFormat.parse(dateStr)); int weekOfYear = calendar.get(Calendar.YEAR); int weekNo = calendar.get(Calendar.WEEK_OF_YEAR); // Calendar 获取月份需要 +1 int nowMonth = calendar.get(Calendar.MONTH) + 1; // 正常 12 月份肯定都是大月份的数如 53 52 51 50 49 如果数是 1 而月份是 12,则表示日期被计算在了下一年 年份需要 +1 if (weekNo == 1 && nowMonth == 12) { weekOfYear = weekOfYear + 1; } // 1 月份肯定都是小数如 1,2,3,4,5 如果数是 52 或者 53 而月份是 1 则表示日期被计算在了上一年,年份需要 -1 if ((weekNo == 53 || weekNo == 52) && nowMonth == 1) { weekOfYear = weekOfYear - 1; } return weekOfYear + "年" + "第" + weekNo + ""; } public static void main(String[] args) throws ParseException { String dateStr = "2022-01-06"; System.out.println(getWeeksInMonthOfDate(dateStr)); } } ``` 该代码把获取指定日期是一年中第几周的逻辑封装成了函数,并且处理了一些边界情况,例如 12 月最后一和 1 月第一的计算问题 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值