Java时间日期的处理

在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成。其中,Date 类主要封装了系统的日期和时间的信息,Calendar 类则会根据系统的日历来解释 Date 对象。

Date 类

Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

1. 构造方法
Date 类有如下两个构造方法。

	Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。

这两个构造方法的使用示例如下:

Date date1 = new Date();    // 调用无参数构造函数
System.out.println(date1.toString());    // 输出:Wed May 18 21:24:40 CST 2016Date date2 = new Date(60000);    // 调用含有一个long类型参数的构造函数
System.out.println(date2);    // 输出:Thu Jan 0108:01:00 CST 1970

Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。

Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。

2. 常用方法
Date 类提供了许多与日期和事件相关的方法,其中常见的方法如下表所示

在这里插入图片描述
假设,某一天特定时间要去做一件事,而且那个时间已经过去一分钟之后才想起来这件事还没有办,这时系统将会提示已经过去了多 长时间。代码如下:

import java.util.Date;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入要做的事情:");String title = input.next();Date date1 = new Date(); // 获取当前日期System.out.println("[" + title + "] 这件事发生时间为:" + date1);try {Thread.sleep(60000);// 暂停 1 分钟} catch (InterruptedException e) {e.printStackTrace();}Date date2 = new Date();System.out.println("现在时间为:" + date2);if (date2.before(date1)) {System.out.println("你还有 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒需要去完成【" + title + "】这件事!");} else {System.out.println("【" + title + "】事情已经过去了 " + (date2.getTime() - date1.getTime()) / 1000 + " 秒");}}
}

在该程序中,分别使用 Date 类的无参数构造方法创建了两个 Date 对象。在创建完第一个 Date 对象后,使用 Thread.sleep() 方法让程序休眠 60 秒,然后再创建第二个 Date 对象,这样第二个 Date 对象所表示的时间将会在第一个 Date 对象所表示时间之后,因此“date2.before(date1)”条件表达式不成立,从而执行 else 块中的代码,表示事情已经发生过。

运行该程序

请输入要做的事情:
放风筝
【放风筝】这件事发生时间为:Fri Oct 12 11:11:07 CST 2018
现在时间为:Fri Oct 12 11:12:07 CST 2018
【放风筝】事情已经过去了 60

Calendar 类

Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。

创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

Calendar c = Calendar.getInstance();

当创建了一个 Calendar 对象后,就可以通过 Calendar 对象中的一些方法来处理日期、时间。
Calendar 类的常用方法。

在这里插入图片描述

Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。

Calendar 类中定义了许多常量,分别表示不同的意义。

	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:星期几。

获取当前月份可用如下代码:

int month = Calendar.getInstance().get(Calendar.MONTH);

如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。

使用 Calendar 类处理日期时间的实例如下:

Calendar calendar = Calendar.getInstance(); // 如果不设置时间,则默认为当前时间
calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:" + calendar.getTime()); // 获取当前时间int year = calendar.get(Calendar.YEAR); // 获取当前年份
System.out.println("现在是" + year + "年");int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加 1)
System.out.print(month + "月");int day = calendar.get(Calendar.DATE); // 获取日
System.out.print(day + "日");int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几(以星期日为第一天)
System.out.print("星期" + week);int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
System.out.print(hour + "时");int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
System.out.print(minute + "分");int second = calendar.get(Calendar.SECOND); // 获取当前秒数
System.out.print(second + "秒");int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
System.out.print(millisecond + "毫秒");int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
System.out.println("今天是本月的第 " + dayOfMonth + " 天");int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 获取今天是本月第几周
System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
System.out.println("今天是今年第 " + many + " 天");Calendar c = Calendar.getInstance();
c.set(2012, 8, 8); // 设置年月日,时分秒将默认采用当前值
System.out.println("设置日期为 2012-8-8 后的时间:" + c.getTime()); // 输出时间

使用 Calendar 类来实现日历的打印功能,代码实现如下:

import java.util.Calendar;public class CalendarDemo {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();calendar.set(2016, 5, 1); // 实际的calendar对象所表示的日期为2016年6月1日// 判断2016年6月1日为一周中的第几天int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;char[] title = { '日', '一', '二', '三', '四', '五', '六' }; // 存放曰历的头部int daysArray[][] = new int[6][7];// 存放日历的数据int daysInMonth = 31; // 该月的天数int day = 1; // 自动增长for (int i = index; i < 7; i++) {// 填充第一周的日期数据,即日历中的第一行daysArray[0][i] = day++;}for (int i = 1; i < 6; i++) {// 填充其他周的日历数据,控制行for (int j = 0; j < 7; j++) {// 如果当前day表示的是本月最后一天,则停止向数组中继续赋值if (day > daysInMonth) {i = 6;break;}daysArray[i][j] = day++;}}System.out.println("------------------2016 年 6 月--------------------\n");for (int i = 0; i < title.length; i++) {System.out.print(title[i] + "\t");}System.out.print("\n");// 输出二元数组daysArray中的元素for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (daysArray[i][j] == 0) {if (i != 0) {// 如果到月末,则完成显示日历的任务,停止该方法的执行return;}System.out.print("\t");continue;}System.out.print(daysArray[i][j] + "\t");}System.out.print("\n");}}
}

Calendar 类所表示的时间月份是 set() 方法中表示月份的参数值 +1,因此 Calendar 类的实际时间为 2016 年 6 月 1 日。在下面的代码中分别获取 6 月 1 日为本周中的第几天,以便在相应的星期下开始输出 6 月份的日历。程序中的 daysArray 是一个二元数组,该二元数组控制了日历的格式输出,第一个子数组控制日历的行,第二个子数组控制曰历的列,即可输出二元数组中的每一个元素。

运行程序,执行结果如下所示。

------------------20166--------------------日 一 二 三 四 五 六1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言基础入门(10)之矩阵和数组

目录 1.矩阵 创建矩阵 查看矩阵的行与列数 转置 2.矩阵子集 3.矩阵行列命名 4.命名后取子集 5.逻辑下标取子集 6.正整数向量的矩阵取子集 7.返回对角线向量 8.创建单位矩阵 9.cbind() 和 rbind() 函数 10. 矩阵运算 10.1 四则运算 10.2 矩阵乘法 10.3 向量与…

foxit phantom pdf 7.3_Jpeg to Pdf Converter 3000批量将图片转为PDF的方法

Jpeg to Pdf Converter 3000是一款非常优秀的图片转PDF软件&#xff0c;该软件界面清爽美观&#xff0c;用户使用该软件&#xff0c;可以快速的将JPG图片转换为PDF文件&#xff0c;而且转换的质量非常高。我们在日常的办公生活中&#xff0c;很多时候为了使图片在传输过程中不被…

Java日期格式化

格式化日期表示将日期/时间格式转换为预先定义的日期/时间格式。例如将日期“Fri May 18 15:46:24 CST2016” 格式转换为 “2016-5-18 15:46:24 星期五”的格式。 在 Java 中&#xff0c;可以使用 DateFormat 类和 SimpleDateFormat 类来格式化日期。 DateFormat 类 DateFor…

变异系数法之matlab

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算变异系数 2.4 计算权重以及得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据标准化 3.4 计算变异系数 3.5 计算权重 3.6 计算得分 完整代码 1.简介 变异系数法(Coefficient of variation …

ui automator viewer 怎么获取界面名_ui交互设计怎么样

ui交互设计怎么样&#xff0c;中天软件培训拥有实力雄厚的师资团队&#xff0c;全部是由国内行业知名专家&#xff0c;全职资深项目讲师、知名企业兼职项目导师组成。ui交互设计怎么样&#xff0c; 一般来说&#xff0c;交互设计师的工作内容就到此为止了。顾名思义&#xff0c…

变异系数法之python

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算变异系数 2.4 计算权重以及得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 查看行数和列数 3.4 数据标准化 3.5 计算变异系数 3.6 计算权重 3.7 计算得分 完整代码 1.简介 变异系数法(Coeff…

电脑上怎么扫二维码_微信里别人发给我的二维码怎么扫

手机版&#xff1a;①打开微信打开聊天框&#xff1b;②点开二维码并长按二维码&#xff1b;③选择识别图中二维码即可。电脑版&#xff1a;①打开对话框点开二维码&#xff1b;②右击二维码选择识别图中二维码即可。

CRITIC法之matlab

目录 1.简介 2.原理解析 2.1 指标正向化及标准化 2.2 计算信息承载量 2.3 计算权重和评分 3.实例分析 3.1 读取数据 3.2 指标正向化及标准化 3.3 计算对比度 3.4 矛盾性 3.5 计算信息载量 3.6 计算权重 3.7 计算得分 完整代码 1.简介 CRITIC是Diakoulaki&#…

Java Object类详解

Object 是 Java 类库中的一个特殊类&#xff0c;也是所有类的父类。也就是说&#xff0c;Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后&#xff0c;如果没有指定继承的父类&#xff0c;那么默认父类就是 Object 类。因此&#xff0c;以下两个类表示的含…

sql 成功率_备考2022年MBA: 如何提高清华、北大MBA提前面试成功率|博雅汇MBA

北大清华在国内可是著名高校&#xff0c;也是不少学子梦寐以求的院校&#xff0c;当然这也就早就竞争激烈的现状&#xff0c;无论是高考还是攻读MBA。那么在剧烈竞争压力下&#xff0c;我们怎么能提高被名校录取的几率呢&#xff0c;我今天从材料关和面试关为大家做一个详细的解…

CRITIC法之python

目录 1.简介 2.原理解析 2.1 指标正向化及标准化 2.2 计算信息承载量 2.3 计算权重和评分 3.实例分析 3.1 读取数据 3.2 指标正向化及标准化 3.3 计算对比度 3.4 矛盾性 3.5 计算信息载量 3.6 计算权重 3.7 计算得分 完整代码 1.简介 CRITIC是Diakoulaki&#…

Java Integer类详解

Integer 类在对象中包装了一个基本类型 int 的值。Integer 类对象包含一个 int 类型的字段。此外&#xff0c;该类提供了多个方法&#xff0c;能在 int 类型和 String 类型之间互相转换&#xff0c;还提供了处理 int 类型时非常有用的其他一些常量和方法。 Integer 类的构造方…

层次分析法之matlab

目录 1.简介 2.算法解析 3.实例分析 3.1 构造矩阵 3.2 查看行数和列数 3.3 求特征向量 3.4 找到最大特征值和最大特征向量 3.5 计算权重 3.6 一致性检验 3.7 计算评分 完整代码 1.简介 一种主观赋权的方法&#xff0c;在数据集比较小&#xff0c;实在不好比较的时候…

css布局方式_收藏!40 个 CSS 布局技巧

简介&#xff1a;CSS是Web开发中不可或缺的一部分&#xff0c;随着Web技术的不断革新&#xff0c;CSS也变得更加强大。CSS的众多属性你知道了多少&#xff1f;具体开发中该使用什么属性才最适合恰当&#xff1f;如今的一些CSS属性可以让我们节约更多的时间。比如在Web布局中&am…

Java Float类详解

Float 类的构造方法 Float 类中的构造方法有以下 3 个。 Float(double value)&#xff1a;构造一个新分配的 Float 对象&#xff0c;它表示转换为 float 类型的参数。Float(float value)&#xff1a;构造一个新分配的 Float 对象&#xff0c;它表示基本的 float 参数。Float(S…

层次分析法之python

目录 1.简介 2.算法解析 3.实例分析 3.1 构造矩阵 3.2 查看行数和列数 3.3 求特征向量 3.4 找到最大特征值和最大特征向量 3.5 计算权重 3.6 一致性检验 3.7 计算评分 完整代码 1.简介 一种主观赋权的方法&#xff0c;在数据集比较小&#xff0c;实在不好比较的时候…

c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...

仓位控制不是精确的科学。它是保证资金安全、有效规避风险、长期稳定盈利的有效手段&#xff0c;有仓位控制意识和规则是股市交易者在心理和技术上成熟的表现之一&#xff0c;仓位控制是建立在市场和个股短期具有不可预测的特性、尊重市场、保证资金安全的基础上的。对于看好的…

Java Double类详解

Double 类的构造方法 Double 类中的构造方法有如下两个。 Double(double value)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示转换为 double 类型的参数。Double(String s)&#xff1a;构造一个新分配的 Double 对象&#xff0c;它表示 String 参数所指示的 do…

matlab设置工作路径

目录 暂时修改路径 永久修改路径 暂时修改路径 a)直接在页面的路径框里粘贴想进的路径然后 回车 即可 b) 如果只是想暂时将文件夹加入路径&#xff0c;防止函数名字空间污染的话&#xff0c;可采用本方法&#xff1a;用MATLAB运行目标文件夹下任意一个m文件&#xff0c;MATL…

Java System类详解

System 类位于 java.lang 包&#xff0c;代表当前 Java 程序的运行平台&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。 System 类提供了一些类变量和类方…