【JAVA】API(3)—输出当前“年月日时分秒星期几”详细时间(Calendar类)

一、前言

前面我们说到有关于API的Random类、Scanner类、String类System类,接下来我们将要学习与日期有关的Date类和Calendar类。

  • 本次学习的任务要求:完成一个 java application应用程序,输出当前“年月日时分秒星期几”详细时间。

二、分析学习

这里的Date类是日期的意思,而Calendar类是日历的意思,接下来我们在JAVA的API中看看这些类为我们带来什么样的便捷之处。

1.Date类介绍

打开API文档,搜索Date类,查看相关的信息如下:
5
我们可以看出,Date类是位于util包下。而且,它还有一个子类也叫Date,但是却是sql包下的Date,二者的关系是继承关系。
Date是一个类,可以表示特定瞬间,能够精确到毫秒,我们由此可以想到System类的某一个方法:System.currentTimeMillis().
但是System的这个方法返回的是当前系统时间(相对于1970-1-1至今)的毫秒数,而Date类可以用方法来设定相应的时间和特定的格式。

2.Date类方法

我们先来看Date的构造方法,如下:
6
我们可以看到,有一些构造方法已经被其他的方法取代,所以我们现在只需要学习Date()Date(long date)即可。

  • Date():创建的是一个表示当前系统时间的Date对象
  • Date(long date):根据指定对象创建Date对象

使用方法后结果显示如下:
7
使用后,日期的格式很难读取,为方便我们读取习惯,我们可以采用下面的这个方法来适量优化:
8
但是我们发现,上面的这个方法已经被DateFormat类替代,所以,接下来我们来学习更加优越的格式化日期的类和方法。

3.DateFormat类介绍

打开API文档,搜索DateFormat类,查看相关的信息如下:
9
我们可以看到,DateFormat类是一个抽象类,不能直接创建对象,我们可以采取以下的两种方法来使用:第一种,使用DateFormat类的子类对象;第二种,使用DateFormat类的静态方法,用返回的值去使用。
相比之下,直接使用SimpleDateFormat子类对象会更加灵活。

4.DateFormat与SimpleDateFormat类方法

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。也就是说,可以这样理解:

格式化:Date格式---->String格式
如: 2018-12-9----->2018年12月9日

即需要寻找一个将Date格式转化为String格式的方法,我们在子类SimpleDateFormat中没有找到,只有在父类DateFormat中寻找,方法如下:
12
可以看到,方法String format(Date date)可以将一个 Date 格式化为日期/时间字符串。
但是当我们需要将给出的日期信息进行数值运算时,我们就需要进行解析:

解析:String格式---->Date格式
如: “2018-12-9”----->精确到毫秒的时间值(可运算)

在SimpleDateFormat类中还是没有寻找到合适方法,所以我们需要再去父类中寻找相应的方法:
13
可以看到,方法Date parse(String source)可以从给定字符串的开始解析文本,以而生成一个日期。

SimpleDateFormat的构造方法摘要:
14

5.Calender类介绍

打开API文档,搜索Calendar类,查看相关的信息如下:
1
我们可以看出,Calendar类是位于util包下,而且,它还是一个抽象类。
因为它为抽象类,不能创建对象,我们则需要寻找它的子类对象和静态方法,最后返回这个类的方法和对象。

4.Calender类方法

构造方法如下:
4
成员方法中:它提供了操作特定日历如 YEAR、MONTH、DAY_OF_MONTH、HOUR 的一些方法,还提供了一个类方法为getInstance,即为所谓的静态方法。
2
Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化,使用例:Calendar rightNow = Calendar.getInstance();
Calendar类的方法中可以用随意的时区和语言环境来获取一个日历。如下:
3
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

三、实践

为了更好的理解和应用Calendar类,我们使用其中的方法来构造一个小的 java application应用程序 ,输出当前“年月日时分秒星期几”详细时间。

  • 详细代码如下:
/* 项目名称:Training_Du
 - 创建时间:2018年12月10日
 - 创建者:Administrator
 - 创建地点:kmust
 */
import java.util.Calendar; //导入Calendar类包
import java.util.Date;//导入Date类包
import java.text.ParseException;//导入text包
import java.text.SimpleDateFormat;//导入text包
public class TimeDemo{//创建CalendarDemo类
public static void main(String[] args){//主方法
	/*Date类:表示特定的、可精确到毫秒的瞬间,可以用方法来设定任意时间的任意格式
	*构造方法:
	*    Date():创建的是一个表示当前系统时间的Date对象
	*    Date(long date):根据指定对象创建Date对象
	*DateFormat与SimpleDateFormat类:格式化和解析日期的类
	*   格式化:Date格式---->String格式 如:2018-12-9----->2018年12月9日
	*   解析:String格式---->Date格式  如:“2018-12-9”----->精确到毫秒的时间值(可运算)
	*构造方法: 
	*    SimpleDateFormat():用默认的模式来构建对象
	*    SimpleDateFormat(String pattern):使用指定模式来创建对象 
	*Calendar:日历的类,其中提供了有关于操作年月日等时间的方法
	*  获取:get方法
	*  修改:set方法
	*  添加:add方法		  
	*/
 	
 	// static Calendar getInstance()//默认模式来获取日历
 	Calendar now = Calendar.getInstance();//创建一个时间对象
 	//修改: void set(int field, int value):把指定的字段修改为指定的值
	//now.set(Calendar.DAY_OF_MONTH, 7);//修改日期为某月的7号
	//添加: void add(int field, int amount):为给定的日历字段添加或减去指定的时间量
 	//now.add(Calendar.DAY_OF_MONTH, -1);//把指定的日期-1
 	//获取: int get(int field)//返回给定日历字段的值
 	// public static final int YEAR //YEAR字段的值是1
 	// System.out.println(Calendar.YEAR);//测试YEAR字段的值
 	// int year = new.get(1);//接受字段值相应的信息
 	int year = now.get(Calendar.YEAR);//初始化year对象;
 	int month = now.get(Calendar.MONTH) + 1;//略历中一年中的第一个月是 JANUARY,它为 0;所以要加1;
  	int day = now.get(Calendar.DAY_OF_MONTH);//指示一月中的天;
  	int hour = now.get(Calendar.HOUR_OF_DAY);//指示一天中的小时;
	int minute = now.get(Calendar.MINUTE);//指示一小时中的分钟;
	int second = now.get(Calendar.SECOND);//指示一分钟中的秒;
 	int millisecond = now.get(Calendar.MILLISECOND);//指示一秒中的毫秒;
	int week=now.get(Calendar.DAY_OF_WEEK);//指示一个星期中的某天。该字段可取的值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDA

	String str="日一二三四五六";//英语国家星期从星期日开始计算。所以我们需要倒退一天来达到目的。
 	System.out.println("现在日期是:" +year + "年" + month + "月" + day +"日");//输出日期
 	System.out.println("当前时间为:" +hour+"点"+minute + "分" +second+"秒"+millisecond+"毫秒");//输出时间
 	System.out.println("目前时间毫秒数:" + now.getTimeInMillis());//输出毫秒数
 	System.out.println("今天是一个星期中的 星期"+str.substring(week-1,week));//输出星期信息
	
	Date d = new Date();//创建当前系统时间的对象
	System.out.println(d);//输出系统时间对象
 	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义指定模式时间对象
	String dateNowStr = sdf.format(d);//转换时间格式
	System.out.println("格式化后的日期:" + dateNowStr);//输出转换格式后的时间
	}
}
  • 运行结果如下:
    15

  • 注意事项与总结:
    首先,我们按照思路创建、获取时间对象;再经过不同的方法来进行格式的转换;最后输出我们想要的结果。但是在使用各种类的方法时,我们要看清方法的说明,其中,本次值得注意的有:

int month = now.get(Calendar.MONTH) + 1;//略历中一年中的第一个月是 JANUARY,它为 0;所以要加1;
int week=now.get(Calendar.DAY_OF_WEEK);//指示一个星期中的某天。该字段可取的值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDA
String str="日一二三四五六";//英语国家星期从星期日开始计算。所以我们需要倒退一天来达到目的。

在使用类的方法时,我们要仔细查看API中对于方法的使用描述,避免出现错误,也逐渐形成一个能独立编写程序的能力。
在平时的编程中,也要养成良好的习惯,前期尽量将注释写到行,小编也是新学者,也在坚持着,大家一起努力吧!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值