题目描述

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

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

输入描述:

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

输出描述:

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

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

输入例子:

2000
2001
2002

输出例子:

10
4 7
9 12
 package com.hone.basicaltest;

 import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.Scanner; /**
* 原题目:https://www.nowcoder.com/pat/2/problem/359
* @author Xia
* 找出历史中即是13号又是星期五的日子
*/
public class basical1029UnluckDay {
public static void main(String[] args) {
Scanner ss = new Scanner(System.in);
while (ss.hasNextLine()) {
int year = ss.nextInt();
int flag = 0;
for (int i = 0; i <= 11; i++) {
String[] weeks = {"","sun","mon","tue","wen","thu","fri","sat"};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Calendar cc = Calendar.getInstance();
cc.set(year, i, 13);
int w = cc.get(Calendar.DAY_OF_WEEK);
if (w == 6) {
if (flag == 0) {
System.out.print(i+1);
flag = 1;
}else {
System.out.print(" "+(i+1));
}
}
}
if (flag == 0) {
System.out.println("Luck");
} } }
}

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

Date介绍

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

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

 Date d = new Date();
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修饰)

Modifier Constructor 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 YEARMONTH, and DAY_OF_MONTH.

 Calendar d2 = Calendar.getInstance(Locale.CHINA);
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:获取日期

 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(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.

 Calendar d2 = Calendar.getInstance(Locale.CHINA);
d2.set(Calendar.YEAR, 2016);
d2.set(Calendar.MONTH, 10);
d2.set(Calendar.DAY_OF_MONTH, 11);
d2.add(Calendar.YEAR, -1); //年份减一
d2.add(Calendar.MONTH, -1); //月份减一
d2.add(Calendar.DATE, 1); //日期加一          最终输出 2015/10/12
System.out.println(d2.get(Calendar.YEAR)+"/"+(d2.get(Calendar.MONTH)+1)+"/"+d2.get(Calendar.DAY_OF_MONTH));
4:比较日期
boolean after(Object when)

Returns whether this Calendar represents a time after the time represented by the specifiedObject.
boolean before(Object when)

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

 Date d3 = new Date();
System.out.println(d3); //Thu Nov 30 19:24:40 CST 2017
Calendar c = Calendar.getInstance();
c.setTime(d3);
System.out.println(c); //java.util.GregorianCalendar[time=1512041080861....

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

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

 import java.util.Calendar;
/**
* 计算小明出生到现在一共多少天?
* @author Xia
*/
public class calendarDay {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.set(2000, 10-1, 1);
//全部转化为相对时间
long birth = c2.getTimeInMillis(); //按照毫秒为单位
long today = c.getTimeInMillis(); long day = (today-birth)/(24*60*60*1000);
System.out.println(day);
}
}

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

PAT——不吉利的日期(java中date和Calendar使用)的更多相关文章

  1. Java中date和calendar的用法

    获取现在系统的时间和日期看起来是一件非常神奇的事情,但是当使用date和calendar之后发现仍然非常神奇. 1.date 使用date日期之前需要导入包: import java.text.Sim ...

  2. Java中Date, Calendar, SimpleDateFormat的相互转换

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  3. Java中Date()类 日期转字符串、字符串转日期的问题(已解决)

    Java中Date()类 日期转字符串.字符串转日期的问题 今天在写东西的时候突然发现一个问题,就是先new 一个Date()然后将生成的值转为字符串, 然后再将转换后的字符串再次用new Date( ...

  4. Java中Date各种相关用法

    Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...

  5. Java中Date和Calender类的使用方法

    查看文章     Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...

  6. Java中Date类型详解

    一.Date类型的初始化 1. Date(int year, int month, int date); 直接写入年份是得不到正确的结果的. 因为java中Date是从1900年开始算的,所以前面的第 ...

  7. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...

  8. Java中Date、String、Calendar类型之间的转化

    1.Calendar 转化 String   //获取当前时间的具体情况,如年,月,日,week,date,分,秒等   Calendar calendat = Calendar.getInstanc ...

  9. java中Date日期类型的大小比较

    方法一:java.util.Date类实现了Comparable接口,可以直接调用Date的compareTo()方法来比较大小 String beginTime = "2018-07-28 ...

随机推荐

  1. Error:Execution failed for task ':xutils:mergeDebugAndroidTestResources'. > No slave process to proc

    Error:Execution failed for task ':xutils:mergeDebugAndroidTestResources'. > No slave process to p ...

  2. mysql表锁、行锁、索引之间暧昧的关系

    MySQL的innodb存储引擎支持行级锁,innodb的行锁是通过给索引项加锁实现的,这就意味着只有通过索引条件检索数据时,innodb才使用行锁,否则使用表锁.根据当前的数据更新语句(UPDATE ...

  3. springboot自定义异常

    SpringBoot自定义异常以及异常处理 在web项目中,我们可能需要给前端返回不同的提示码.例如:401表示没有权限,500代表位置异常,200代表请求成功等.但是这些提示码远远不能满足我们返回给 ...

  4. console.log出来的信息不一定是真的

    一.问题 拿接口取值,明明this.props.chartsValue[0]已经返回json数据,结果this.props.chartsValue[0].history报错:无法获得undefined ...

  5. 【转】mouseover和mouseenter的区别

    一.当绑定着两个事件的元素里面没有子元素的时候,这两个事件的触发效果是一致的: x=0; y=0; $(document).ready(function(){ $("div.over&quo ...

  6. MySQL数据库学习笔记<一>

    MySQL基本概念以及简单操作   一.MySQL   MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系 ...

  7. string 替换字符串

    C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事.首先明白一个概念,即string替换所有 ...

  8. Android学习——BroadCast(二)

    这篇博文介绍有序广播的使用 有序广播的发送 和普通广播完全相同,只需要更换发送的方式即可 ordered.setOnClickListener(new View.OnClickListener() { ...

  9. react-native-splash-screen

    react-native-splash-screen在GitHub上的地址:https://github.com/crazycodeboy/react-native-splash-screen rea ...

  10. Tomcat的运行模式

    tomcat的三种运行模式 tomcat Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下:  这三种模式的不同之处如下: ●BIO:  一个线程处理一个请求.缺 ...