java编程打印大学四年的生日都是星期几

java编程打印大学四年的生日都是星期几,第1张

下面是一个简单的 Java 程序示例,用于打印指定时间段内每个日期是星期几:

```java

import javatimeDayOfWeek;

import javatimeLocalDate;

public class BirthdayPrint {

public static void main(String[] args) {

int startYear = 2022; // 开始年份

int endYear = 2025; // 结束年份

for (int year = startYear; year <= endYear; year++) {

for (int month = 1; month <= 12; month++) {

for (int day = 1; day <= 31; day++) { // 最大值为 31,超出月份天数的部分会自动忽略

try {

LocalDate date = LocalDateof(year, month, day);

DayOfWeek dow = dategetDayOfWeek();

Systemoutprintln(date + " is " + dow);

} catch (Exception e) { // 如果日期非法,则会抛出异常,这里捕获并忽略即可

}

}

}

}

}

}

```

此程序使用 Java 8 中的 `LocalDate` 类和 `DayOfWeek` 枚举类型,循环遍历指定时间范围内的所有日期,并通过 `getDayOfWeek()` 方法获取每个日期对应的星期几。最后将所有结果输出到控制台。

需要注意的是,在本程序中,我们没有做任何错误处理,例如输入的起始和结束年份必须合法、超出日期范围的日期会被自动忽略等等情况需要根据实际需求进行适当处理。

JAVA 8 Time示例

import javatimeLocalDate;

import javatimeLocalDateTime;

import javatimeLocalTime;

import javatimeMonth;

import javatimetemporalChronoUnit;

public class Java8TimeDemo {

//LocalDate和LocalTime和String一样,是final修饰的不变类型,线程安全且不能修改。

public static void main(String[] args) {

// 取当前日期:

LocalDate today = LocalDatenow();

Systemoutprintln(today);

// 根据年月日取日期,月份从1开始到12 而不是javautildate里的月份从0到11:

LocalDate birthday = LocalDateof(2015, 10, 27);

long days = ChronoUnitDAYSbetween(birthday,today);

if(birthdayisBefore(today)){

Systemoutprintln("生日已过"+days+"天");

}else{

Systemoutprintln("还差"+Mathabs(days)+"天过生日");

}

int year = todaygetYear();//年

Systemoutprintln(year);

int month = todaygetMonthValue();//月

Systemoutprintln(month);

int day = todaygetDayOfMonth();//日

Systemoutprintln(day);

int dw = todaygetDayOfWeek()getValue();//星期几

Systemoutprintln("星期"+dw);

int dd = todaylengthOfMonth();//本月多少天

Systemoutprintln(dd);

boolean leapYear = todayisLeapYear();//是否是润年

Systemoutprintln(leapYear"是闰年":"不是闰年");

//LocalDate的实例。由于它是不可变类型,每次 *** 作都会产生一个新的实例,而原有实例不收任何影响。

LocalDate date = LocalDateof(1998, MonthNOVEMBER, 01);

date = datewithYear(2200); //设置年

Systemoutprintln(date);

date = dateplusMonths(2); //增加2个月 plus

Systemoutprintln(date);

date = dateminusDays(1);//减去1天

Systemoutprintln(date);

LocalTime now = LocalTimenow(); // 包含毫秒数

Systemoutprintln(now);

now = LocalTimenow()withNano(0); //清除毫秒数:

Systemoutprintln(now);

LocalDateTime dateTime = LocalDateTimenow();

Systemoutprintln(dateTime);

}

}

javautilCalendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如

YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为 *** 作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected。

与其他语言环境敏感类一样,Calendar 提供了一个类方法

getInstance,以获得此类型的一个通用的对象。Calendar 的

getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

Calendar rightNow = CalendargetInstance();

Calendar 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH ==

JANUARY。其他值是由具体子类(例如 ERA)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。

另外一个是 javautilDate

类 Date 表示特定的瞬间,精确到毫秒。

在 JDK 11 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 11

开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。

尽管 Date 类打算反映协调世界时 (UTC),但无法做到如此准确,这取决于 Java

虚拟机的主机环境。当前几乎所有 *** 作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒。但对于

UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995

年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。

T的含义是表示时间的开始;

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。

Java还剔除了C++的 *** 作符过载(overload)和多继承特征,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。

面向对象

Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和 *** 纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和 *** 作数据的方法的集合。

数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(javaawt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(javaio包)和支持网络功能的类(javanet包)。

/

获取上周五时间

/

public Date lastFirday() {

//作用防止周日得到本周日期

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

int dayOfWeek = calendarget(CalendarDAY_OF_WEEK) - 1;

int offset = 7 - dayOfWeek;

calendaradd(CalendarDATE, offset - 9);

return DateTimeUtilgetFirstDayOfWeek(calendargetTime(), 6);//这是从上周日开始数的到本周五为6

}

/

获取上周一时间

/

public Date lastMonday() {

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

int dayOfWeek = calendarget(CalendarDAY_OF_WEEK) - 1;

int offset = 1 - dayOfWeek;

calendaradd(CalendarDATE, offset - 7);

return DateTimeUtilgetFirstDayOfWeek(calendargetTime(), 2);

}

时间处理,更方便和更易读的代码角度讲,肯定要用Java8的新date api啦,由于涉及到一系列日期,所以结合Java8的Stream也是理所当然

总体思路:

由于节假日每年在变,所以需要罗列出所有的节假日集合A

生成2016-01-01 至 2016-05-01所有的日期,生成日期集合B

从B中过滤掉A中的节假日

从B中过滤掉周六周日

最后把B中集合打印

结合思路,所见即所得的代码如下:

// 所有节假日的日期集合,这里你可以自己添加,只写了两个仅供参考(完成思路1)

List<LocalDate> holidays = ArraysasList(LocalDateparse("2016-01-01"), LocalDateparse("2016-05-01"));

// 按照起始2016-01-01,每次递增一天的方式生成一个Stream

Streamiterate(LocalDateparse("2016-01-01"), localDate -> localDateplusDays(1))

        // 按照要求的时间间隔2016-01-01 至 2016-05-01中的实际间隔天数截断Stream(完成思路2)

        limit(ChronoUnitDAYSbetween(LocalDateparse("2016-01-01"), LocalDateparse("2016-05-01")))

        // 过滤其中的节假日(完成思路3)

        filter(localDate -> !holidayscontains(localDate))

        // 过滤其中的周六

        filter(localDate -> !DayOfWeekSATURDAYequals(DayOfWeekof(localDateget(ChronoFieldDAY_OF_WEEK))))

        // 过滤其中的周日(完成思路4)

        filter(localDate -> !DayOfWeekSUNDAYequals(DayOfWeekof(localDateget(ChronoFieldDAY_OF_WEEK))))

        // 打印最后结果(完成思路5)

        forEach(Systemout::println);

打印的结果:

综上:结合新时间API的易用性+Stream处理集合的快捷性,写出代码还是很简洁的

import javatextSimpleDateFormat;

import javautilDate;

import javautilCalendar;

public class WorkDay {

public static void main(String[] args) {

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd E");

for (Date date : getWeekDay()) {

Systemoutprintln(dateFormatformat(date));

}

}

public static Date[] getWeekDay() {

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

Date[] dates = new Date[5];

for (int i = 0; i &lt; 5; i++) {

dates[i] = calendargetTime();

calendaradd(CalendarDATE, 1);

}

return dates;

}

}

如果每周指的是从星期一开始,那么这个程序可以达到你的要求。

如果每周指得是从星期日开始,那么请说明,我再修改。

以上就是关于java编程打印大学四年的生日都是星期几全部的内容,包括:java编程打印大学四年的生日都是星期几、如何在Java 8中愉快地处理日期和时间、如何在JDK1.8中愉快地处理日期和时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9473006.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存