Java输出小明算对多少题目_PAT——不吉利的日期(java中date和Calendar使用)

该博客讲述了如何在Java中找出给定年份中每个月的13号是否为星期五,并输出这些不吉利的月份。通过使用Calendar类设置日期并检查DAY_OF_WEEK字段,博主展示了如何遍历一年中的每个月,找到符合条件的月份。此外,还介绍了Java中Date和Calendar类的基本用法,包括设置和获取日期、比较日期以及日期之间的转换。
摘要由CSDN通过智能技术生成

题目描述

在国外,每月的 13 号和每周的星期 5 都是不吉利的。特别是当 13 号那天恰好是星期 5时,更不吉利。

现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份。

输入描述:

输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。

输出描述:

对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。

如果当年不存在13号是星期五的月份,就输出一行Luck。

输入例子:

2000

2001

2002

输出例子:

10

4 7

9 12

1 packagecom.hone.basicaltest;2

3 importjava.text.SimpleDateFormat;4 importjava.util.Calendar;5 importjava.util.Locale;6 importjava.util.Scanner;7

8

9 /**

10 * 原题目:https://www.nowcoder.com/pat/2/problem/359

11 *@authorXia12 * 找出历史中即是13号又是星期五的日子13 */

14 public classbasical1029UnluckDay {15 public static voidmain(String[] args) {16 Scanner ss = newScanner(System.in);17 while(ss.hasNextLine()) {18 int year =ss.nextInt();19 int flag = 0;20 for (int i = 0; i <= 11; i++) {21 String[] weeks = {"","sun","mon","tue","wen","thu","fri","sat"};22 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");23 Calendar cc =Calendar.getInstance();24 cc.set(year, i, 13);25 int w =cc.get(Calendar.DAY_OF_WEEK);26 if (w == 6) {27 if (flag == 0) {28 System.out.print(i+1);29 flag = 1;30 }else{31 System.out.print(" "+(i+1));32 }33 }34 }35 if (flag == 0) {36 System.out.println("Luck");37 }38

39 }40

41 }42 }

下面来介绍java中Date以及Calendar的使用:

Date介绍

在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。

1、使用Date类代表当前系统时间

1 Date d = newDate();

3 System.out.println(d);

使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象,显示的结果如下:

但是遗憾的是,Date很多方法都已经被遗弃,现在主要使用功能更强大的Calendar类。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象

Calendar rightNow = Calendar.getInstance(); //用于获取当前实例化的时间

Calendar.getInstance(); 并没有主动继承显示日期的toString()方法,无法直接打印rightNow来获得日期。

具有两个构造方法(都是protected修饰)

ModifierConstructor and Description

protected

Calendar()

Constructs a Calendar with the default time zone and the default FORMAT locale.

protected

Calendar(TimeZone zone, Locale aLocale)

Constructs a calendar with the specified time zone and locale.

常见的方法:

1:设置日期

void

set(int year, int month, int date)

Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH.

1 Calendar d2 =Calendar.getInstance(Locale.CHINA);2 d2.set(2017, 10, 11);        //表示2017、11、11

注意:年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。

只设定某一个字段的日期:

void

set(int field, int value)

Sets the given calendar field to the given value.

Calendar d2 =Calendar.getInstance(Locale.CHINA);d2.set(Calendar.YEAR, 2016);d2.set(Calendar.MONTH, 10);d2.set(Calendar.DAY_OF_MONTH, 11);      //d2 : 2016/11/11

设置中常见的属性:

Calendar.YEAR——年份

Calendar.MONTH——月份

Calendar.DATE——日期

Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

Calendar.HOUR——12小时制的小时数

Calendar.HOUR_OF_DAY——24小时制的小时数

Calendar.MINUTE——分钟

Calendar.SECOND——秒

Calendar.DAY_OF_WEEK——星期几

2:获取日期

1 Calendar d2 =Calendar.getInstance(Locale.CHINA);2 d2.set(Calendar.YEAR, 2016);3 d2.set(Calendar.MONTH, 10);4 d2.set(Calendar.DAY_OF_MONTH, 11);5 System.out.println(d2.get(Calendar.YEAR)+"/"+(d2.get(Calendar.MONTH)+1)+"/"+d2.get(Calendar.DAY_OF_MONTH))

//年份

int year = d2.get(Calendar.YEAR);

//月份

int month = d2.get(Calendar.MONTH) + 1;

//日期

int date = d2.get(Calendar.DATE);

//小时

int hour = d2.get(Calendar.HOUR_OF_DAY);

//分钟

int minute = d2.get(Calendar.MINUTE);

//秒

int second =d2.get(Calendar.SECOND);

3:改变日期

abstract void

add(int field, int amount)

Adds or subtracts the specified amount of time to the given calendar field, based on the calendar's rules.

1 Calendar d2 =Calendar.getInstance(Locale.CHINA);2 d2.set(Calendar.YEAR, 2016);3 d2.set(Calendar.MONTH, 10);4 d2.set(Calendar.DAY_OF_MONTH, 11);5 d2.add(Calendar.YEAR, -1); //年份减一

6 d2.add(Calendar.MONTH, -1); //月份减一

7 d2.add(Calendar.DATE, 1); //日期加一          最终输出 2015/10/12

8 System.out.println(d2.get(Calendar.YEAR)+"/"+(d2.get(Calendar.MONTH)+1)+"/"+d2.get(Calendar.DAY_OF_MONTH));

4:比较日期

boolean

Returns whether this Calendar represents a time after the time represented by the specifiedObject.

boolean

Returns whether this Calendar represents a time before the time represented by the specified Object.

Calendar d = Calendar.getInstance(); //得到当前日期

Calendar d2 =Calendar.getInstance(Locale.CHINA);

d2.set(Calendar.YEAR,2016);

d2.set(Calendar.MONTH,10);

d2.set(Calendar.DAY_OF_MONTH,11);

System.out.println(d.after(d2));//true

5:Calendar对象和Date对象相互转化

首先将Calendar对象转化为Date

Calendar d = Calendar.getInstance(); //得到当前日期 (当前日期为:2017/11/30)

System.out.println(d); //java.util.GregorianCalendar[time=1512040754905.........

Date date =d.getTime();

System.out.println(date);//Thu Nov 30 19:19:14 CST 2017

将Date对象转化为Calendar

1 Date d3 = newDate();2 System.out.println(d3); //Thu Nov 30 19:24:40 CST 2017

3 Calendar c =Calendar.getInstance();4 c.setTime(d3);5 System.out.println(c); //java.util.GregorianCalendar[time=1512041080861....

6

举例:计算小明出生到今天一共有多少天?

假设:小明是2000、10、1出生

1 importjava.util.Calendar;2 /**

3 * 计算小明出生到现在一共多少天?4 *@authorXia5 */

6 public classcalendarDay {7 public static voidmain(String[] args) {8 Calendar c =Calendar.getInstance();9 Calendar c2 =Calendar.getInstance();10 c2.set(2000, 10-1, 1);11 //全部转化为相对时间

12 long birth = c2.getTimeInMillis(); //按照毫秒为单位

13 long today =c.getTimeInMillis();14

15 long day = (today-birth)/(24*60*60*1000);16 System.out.println(day);17 }18 }

更多的内容请参见jdk1.8或者其他版本的API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值