Java日期小结

盘点那些好用的SAP FIORI App(二) -上传凭证Upload Journal Entry SAP FICO运维问题及解决方案分享 阅读详情
一JAVA日期基础 1 java.util.Calender

构造器

Date类有很多个构造器方法,大部分已经不被赞成使用了(Deprecated),不过还剩下两个可以使用的:

public Date() {  

   this(System.currentTimeMillis());  

}   

public Date(long date) {   

    //othercode   

}  

第一个是无参构造器,使用系统当前时间的毫秒数来创建Date对象,它调用了java.lang.System类的currentTimeMillis()来取得系统的当前时间的毫秒值。第二个构造器是根据给定的毫秒数来创建一个与之对应的Date对象,这个毫秒数决定了被创建对象的年、月、日、时、分、秒属性的值。

比较

既然Date对象可以表示相对于“1970-01-0100:00:00.000 GMT”的毫秒数,我们自然可以通过这个值来比较两个日期的大小了,不过对于日期来讲,前后的说法应该更为恰当。而Date类已经为我们提供了这样的方法:

public boolean before(Date when) {   

    //othercode   

}   

  

public boolean after(Date when) {   

    //othercode   

}   

  

public int compareTo(Date anotherDate) {   

    //othercode   

}  

before()是判断当前日期是否在参数日期之前,即当前日期毫秒数小于参数日期毫秒数;after()是判断当前日期是否在参数日期之后,即当前日期毫秒数大于参数日期毫秒数。而compareTo()是将当前日期与参数日期比较后,返回一个int型值,它的返回值有三种可能:-1、0和1。如果返回-1则表示当前日期在参数日期之前;如果返回0则表示两个日期是同一时刻;返回1则表示当前日期在参数日期之后。

2  java.util. GregorianCalendar

Calendar是一个抽象类,我们无法直接实例化它,它有一个具体子类实体类java.util.GregorianCalendar,这个类实现的就是我们日常所用的公历历法,或者叫做阳历。我们可以直接使用new命令创建它的实例,或者使用Calendar类的这个方法来获得它实例:

Calendarcalendar = new GregorianCalendar();

或Calendar c1 = Calendar.getInstance();   

构造器

创建方式:Calendar.getInstance() 

日期时间:2008年07月22日 11:54:48 

 

创建方式:new GregorianCalendar() 

日期时间:2008年07月22日 11:54:48 

 

创建方式:new GregorianCalendar(2008, 8, 8)

日期时间:2008年09月08日 00:00:00 

 

创建方式:new GregorianCalendar(2008, 8, 8, 6, 10) 

日期时间:2008年09月08日 06:10:00 

 

创建方式:new GregorianCalendar(2008, 8, 8, 18, 10, 5) 

日期时间:2008年09月08日 18:10:05

注意:

1  在创建GregorianCalendar对象时,月份值都设定为8,但打印结果都是9月份。这并不是我们的代码有问题,而是因为JAVA表示的月份是从0开始的,也就是说它用来表示月份的数值总是比实际月份值小1。因此我们要表示8月份,就是应该设置8-1=7这个值。 

2  GregorianCalendar的小时数是24小时制的。

为了避免出现因为忘记处理1的差值而设置了错误的月份,也让代码看起来更加直观,推荐大家使用定义在Calendar类的的这些常量来代替直接用数字表示月份: 

一月:Calendar.JANUARY = 0 二月:Calendar.FEBRUARY = 1 三月:Calendar.MARCH = 2 四月:Calendar.APRIL = 3 五月:Calendar.MAY = 4 六月:Calendar.JUNE = 5 七月:Calendar.JULY = 6 八月:Calendar.AUGUST = 7 九月:Calendar.SEPTEMBER = 8 十月:Calendar.OCTOBER = 9 十一月:Calendar.NOVEMBER = 10 十二月:Calendar.DECEMBER = 11 

获得属性值

    如果我们想要从Calendar对象获得各种属性的值,就需要调用它的get(intfield)方法,这个方法接收一个int型的参数,并且根据这个给定参数的值来返回相应的属性的值。该方法的定义如下: 

public int get(int field){   

    //othercode   

}  

其中field参数可以为下列属性:

属性名称:Calendar.AM_PM 

代表含义:上下午标识,上午返回Calendar.AM=0,下午返回Calendar.PM=1 

 

属性名称:Calendar.DATE 

代表含义:一个月中的第几天,同Calendar.DAY_OF_MONTH 

 

属性名称:Calendar.DAY_OF_MONTH 

代表含义:一个月中的第几天,同Calendar.DATE 

 

属性名称:Calendar.DAY_OF_WEEK 

代表含义:一周中的第几天,对应星期几,第一天为星期日,于此类推。 

星期日:Calendar.SUNDAY=1 

星期一:Calendar.MONDAY=2 

星期二:Calendar.TUESDAY=3 

星期三:Calendar.WEDNESDAY=4 

星期四:Calendar.THURSDAY=5 

星期五:Calendar.FRIDAY=6 

星期六:Calendar.SATURDAY=7 

 

属性名称:Calendar.DAY_OF_WEEK_IN_MONTH 

代表含义:这一天所对应的星期几在该月中是第几次出现 

 

属性名称:Calendar.DAY_OF_YEAR 

代表含义:一年中的第几天 

 

属性名称:Calendar.HOUR 

代表含义:12小时制下的小时数,中午和午夜表示为0 

 

属性名称:Calendar.HOUR_OF_DAY 

代表含义:24小时制下的小时数,午夜表示为0

 

属性名称:Calendar.MILLISECOND 

代表含义:毫秒数 

 

属性名称:Calendar.MINUTE 

代表含义:分钟 

 

属性名称:Calendar.MONTH 

代表含义:月份,从0到11表示12个月份,比实际月份值小1 

 

属性名称:Calendar.SECOND 

代表含义:秒 

 

属性名称:Calendar.WEEK_OF_MONTH 

代表含义:一个月中的第几个星期 

 

属性名称:Calendar.WEEK_OF_YEAR 

代表含义:一年中的第几个星期 

 

属性名称:Calendar.YEAR 

代表含义:年份

 

相互转换

Calendar对象和Date对象可以通过Calendar类的如下两个方法进行相互转换: 

public final Date getTime() {   

    //othercode   

}   

public final void setTime(Date date) {   

    //othercode   

}  

 

二  Date型日期格式化与解析

抽象类DateFormat以及它的子类实体类SimpleDateFormat都位于java.text包中,是专门用于日期格式化和解析的类。而这两项工作的核心就是我们为此设定的Pattern,我们可以称之为“日期格式表达式”。

理论上讲日期格式表达式包含全部26个英文字母的大小写,不过它们中的一些字母只是被预留了,并没有确切的含义。目前有效的字母及它们所代表的含义如下: 

G:年代标识,表示是公元前还是公元后 y:年份 M:月份 d:日 h:小时,从1到12,分上下午 H:小时,从0到23 m:分钟 s:秒 S:毫秒 E:一周中的第几天,对应星期几,第一天为星期日,于此类推        z:时区 D:一年中的第几天 F:这一天所对应的星期几在该月中是第几次出现 w:一年中的第几个星期 W:一个月中的第几个星期 a:上午/下午标识 k:小时,从1到24 K:小时,从0到11,区分上下午

在日期格式表达式中出现的所有字母,在进行日期格式化操作后,都将被其所代表的含义对应的属性值所替换,并且对某些字母来说,重复次数的不同,格式化后的结果也会有所不同。请看下面的例子:

格式如下位数从1开始逐个增加:

String pattern = "年代:G;年份:y;月份:M;日:d;时(1~12):h;时(0~23):H;分:m;秒:s;毫秒:S;星期:E;上/下午:a;时区:z";   

pattern = "年代:GG;年份:yy;月份:MM;日:dd;时(1~12):hh;时(0~23):HH;分:mm;秒:ss;毫秒:SS;星期:EE;上/下午:aa;时区:zz";

 pattern = "年代:GGG;年份:yyy;月份:MMM;日:ddd;时(1~12):hhh;时(0~23):HHH;分:mmm;秒:sss;毫秒:SSS;星期:EEE;上/下午:aaa;时区:zzz";   

pattern = "年代:GGGG;年份:yyyy;月份:MMMM;日:dddd;时(1~12):hhhh;时(0~23):HHHH;分:mmmm;秒:ssss;毫秒:SSSS;星期:EEEE;上/下午:aaaa;时区:zzzz";   

pattern = "年代:GGGGG;年份:yyyyy;月份:MMMMM;日:ddddd;时(1~12):hhhhh;时(0~23):HHHHH;分:mmmmm;秒:sssss;毫秒:SSSSS;星期:EEEEE;上/下午:aaaaa;时区:zzzzz";   

pattern = "年代:GGGGGG;年份:yyyyyy;月份:MMMMMM;日:dddddd;时(1~12):hhhhhh;时(0~23):HHHHHH;分:mmmmmm;秒:ssssss;毫秒:SSSSSS;星期:EEEEEE;上/下午:aaaaaa;时区:zzzzzz";   

输出结果如下: 

1位:年代:公元;年份:08;月份:7;日:22;时(1~12):3;时(0~23):15;分:17;秒:49;毫秒:187;星期:星期二;上/下午:下午;时区:CST 

2位:年代:公元;年份:08;月份:07;日:22;时(1~12):03;时(0~23):15;分:17;秒:49;毫秒:187;星期:星期二;上/下午:下午;时区:CST 

3位:年代:公元;年份:08;月份:七月;日:022;时(1~12):003;时(0~23):015;分:017;秒:049;毫秒:187;星期:星期二;上/下午:下午;时区:CST 

4位:年代:公元;年份:2008;月份:七月;日:0022;时(1~12):0003;时(0~23):0015;分:0017;秒:0049;毫秒:0187;星期:星期二;上/下午:下午;时区:中国标准时间 

5位:年代:公元;年份:02008;月份:七月;日:00022;时(1~12):00003;时(0~23):00015;分:00017;秒:00049;毫秒:00187;星期:星期二;上/下午:下午;时区:中国标准时间 

6位:年代:公元;年份:002008;月份:七月;日:000022;时(1~12):000003;时(0~23):000015;分:000017;秒:000049;毫秒:000187;星期:星期二;上/下午:下午;时区:中国标准时间

如果我们想输出原始的字母,而不是它们所代表含义的替换值,就需要用单引号将它们包含在内,对于预留字母也是如此,虽然它们没有确切的含义。一对单引号可以一次包含多个字母,而两个连续的单引号将输出一个单引号结果,双引号则需要转义后输出。对于26个字母之外的字符,可以放在一对单引号中,也可以直接书写。请看下面的例子:

Date now = new Date();   

SimpleDateFormat df = new SimpleDateFormat(   

                "'YEAR': yyyy 'MONTH:' ''MM'' 'DAY:'\"dd\" ");   

 System.out.println(df.format(now));   

运行结果: 

YEAR: 2008MONTH: '07' DAY: "22"

上面的一些例子中,我们将日期对象转换成一定格式的字符串输出,以得到符合我们习惯的较为友好的表现形式。我们还可以反过来,使用DateFormat类的parse(String source)方法将具有一定格式的字符串转换为一个Date对象,前提是我们利用前面讲到日期格式表达式语法为其找到一个合适的Pattern。例如:

String pattern = "yyyy-MM-dd";   

System.out.println("对应表达式:" + pattern);   

SimpleDateFormat df = newSimpleDateFormat(pattern);   

Date date = df.parse(s);   

System.out.println("转换后的值:" + date);   

举几个例子:

       原始字符串:2008-08-08 

对应表达式:yyyy-MM-dd 

转换后的值:Fri Aug 08 00:00:00 CST 2008 

 

原始字符串:05年2月12日 18:04:33 

对应表达式:yy年M月d日 HH:mm:ss 

转换后的值:Sat Feb 12 18:04:33 CST 2005 

 

原始字符串:16/5/2004 20:7:2.050 

对应表达式:d/M/yyyy HH:m:s.SSS 

转换后的值:Sun May 16 20:07:02 CST 2004

三 JAVA日期加减运算1.用java.util.Calender来实现

Calendarcalendar=Calendar.getInstance();   

      calendar.setTime(new Date());

      System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天的日期 

      calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+1);

//让日期加1   

      System.out.println(calendar.get(Calendar.DATE));//加1之后的日期

2.用java.text.SimpleDateFormat和java.util.Date来实现

Date d=newDate();   

   SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");   

   System.out.println("今天的日期:"+df.format(d));   

   System.out.println("两天前的日期:" + df.format(new Date(d.getTime() - 2 * 24 * 60 * 60 *1000)));   

    System.out.println("三天后的日期:" + df.format(new Date(d.getTime() + 3 * 24 * 60 * 60 *1000)));

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年) 此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章) 阅读详情

相关推荐

MounRiver Studio实战:像管理个人项目一样整理沁恒MCU的EVT例程(附文件结构图)

本文详细介绍了如何使用MounRiver Studio重构沁恒MCU的EVT例程,实现工程化管理。通过分析官方EVT设计的局限性,提出标准化的目录结构和迁移步骤,帮助开发者提升代码可维护性和团队协作效率。文章还提供了MounRiver Studio的关键配置参数和常见问题排查指南,适用于沁恒MCU开发者。

weixin_33940469的博客 356

java日期比较和日期计算方法小结

这篇文章主要为大家详细总结了常用的java日期比较和日期计算方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   1.获取两个日期的差值(返回的是时间戳) /** * 这个是用来获取两个日期的差值的 * * @return 差值 */ public static Long getSubTime(String date3,String date4) { Date...

HY845638534的博客 1991

销售预测的方法与模型(三)丨安全库存与再订货(补货)

较高的 Z 值对应较高的服务水平(例如,服务水平 99% 对应 Z 值 2.33),意味着企业希望更低的缺货风险,因此需要更高的安全库存。在再订货点的管理中,考虑到供应商交货的不确定性,通常需要结合安全库存,以防止在交货期间库存用尽。要对L开根号,根号L表示交货周期越长,企业需要的安全库存越多,因为在较长的供应期内,需求波动的累积效应更明显。举例:供应商的交期服从标准差为2件/天的正态分布,顾客需求为50件/天的正态分布,若要客户服务水平达到 90%,安全库存量应该是多少?下面介绍几种核心的模型与公式。

weixin_45675709的博客 1534

JAVA日期时间小结

Java /juxinsishui 发表于2006-08-14, 23:54 Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数

雨中怡然 1826

ks-快手滑块验证码-Js逆向

本文分析了快手滑块验证码的破解过程。首先通过抓包找到验证码背景图接口,发现需要动态获取captchaSession参数。然后深入分析验证流程,发现verifyParam参数被加密处理,需要追踪其生成逻辑。文章详细解析了加密参数c的构成,包括captchaSn、滑动距离、轨迹信息等,并指出轨迹验证较为严格。最后通过对比浏览器和本地生成的加密值,确认加密逻辑正确,但指出轨迹生成仍需优化。作者建议参考相关文章深入分析轨迹逻辑,并提供了验证成功的截图作为参考。

2302_76420666的博客 1877

LabVIEW实战:3步搞定Excel模板数据填充(附完整VI源码)

本文提供了一个高效的LabVIEW Excel报表自动化方案,通过使用命名区域定位和动态文件管理,实现数据的精准、动态填充。文章详细阐述了如何构建可复用的数据填充引擎,包括文本、表格数据及图表的写入,并分享了主程序流程、错误处理及性能优化等进阶技巧,帮助工程师彻底摆脱手动操作,提升工作效率。

weixin_29233333的博客 276

java日期时间处理小结

java日期时间处理小结 这两周时间的Java开发让我感觉到JAVA语言确实把一些简单的事情搞得很复杂,比如日期时间处理,或许是考虑不同时区国际化跨平台之类的因素,但JAVA语言处理确实让我很困惑,相信身边好多开发的同事也如此,只是简单知道有这些概念,遇到具体问题还需要上网查找,刚没事上网搜索了Java时间处理、api相关主题,基本没有多少满意结果,就暂时将觉得好的、让我有些收获的记

u014402634的专栏 500

【嵌入式DIY实例-Arduino篇】-脉搏传感器监测脉搏率 (BPM)及可视化

在本文中,我们将使用 Arduino 和脉搏传感器来测量心率 (BPM)。 在文章中,我们将向展示如何使用脉搏传感器测量您的心率(每分钟心跳次数),并在电脑上位机通过Processing来实现心率数据可视化。同时使用LCD16×2 显示屏显示脉搏率 BPM。 该传感器易于使用和操作。 只需将手指放在传感器顶部,它就会测量心跳变化。

视觉与物联智能 834

java 日期类 小结

import java.text.*; import java.util.*; class Test2 { public static void main(String[] args) { System.out.println(System.currentTimeMillis()); // 该方法是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(...

weixin_33701564的博客 97

无人船 | 基于ROS的轻量级多无人艇自主导航仿真框架

无人水面艇USV是海上自主无人系统的关键组成部分,在民用、军用领域应用广泛,例如海上救援、水质测量、扫雷反潜等,因此对USV导航算法的研究具有重要意义。为了便于进行USV相关算法的验证与部署,本文介绍的这套基于ROS的多无人艇的自主导航仿真平台,轻量化地实现了建图、规划、控制等多种功能,同时自研框架保证了功能的高度可拓展和可定制

FRIGIDWINTER的博客 8002

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5107

java日期时间小结

java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了 Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并 将文本数据解析成日期对象。学习日期, 日期格式, 日期的解析和日期的计算。  我们将讨论下面的类:  1、  具

红星4号的专栏 901

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2871

Java中日期时间API小结

Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hold住这堆东西了。 常用的类 表示类 java.util.Date :能够准确记录到毫秒级别的时间表示类,但是其中的各种get set(修改时间或者获取时间中某一个特殊参数)都已经被废弃。...

aiqianyu0268的博客 257

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

关于java日期的小结

1.计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); //year 为 int time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 ...

Gabriel 146

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中日期时间格式的小结

<br />=================================================<br />我的总结:Java中有关日期时间格式的总结<br />=================================================<br />1、与日期时间相关的类:<br />      第一:java.util.Date;<br />      第二:java.util.Calender;<br />      第三:java.text.DateFormat<b

Joyodong的专栏 7201

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java 日期差_java计算时间差, 日期差小结

1、java 7中的日历类CalendarCalendar类使用其静态的getInstance()方法获取一个日历实例,该实例为当前的时间;如果想改变时间,可以通过其setTime方法传入一个Date对象,即可获得Date对象所表示时间的Calendar对象1 /**2 *使用Calendar对象计算时间差,可以按照需求定制自己的计算逻辑3 *@paramstrDate4 *@throwsPars...

weixin_39608988的博客 387

Java中简单日期类和日历类的小结

日期类是用来描述日期的,在java中日期都是用long来保存的(精确到毫秒) 任何日期类都可以用long来相互转换 java中有4种日期类 java.util.Date :常用的类,功能少,能表示时间和日期 java.sql.Date:它是java.util.Date的子类,表示日期 java,sql.Time:它是java.util.Date的子类,表示时间 java.sql.Tim

AL菜菜的专栏 1912

Java对日期的处理小结

先是写一个工具类,完成由Date-->String,String-->Date,Date-->Calendar,Calendar-->Date 的转化,并在此基础上衍生出Calendar-->String,String-->Calendar。至此便可以完成一般的对日期的操作(由String类型的传进去交由Calendar处理)然后再输出显示按照预期想要的格式的处理后的日期 (一)DateUti...

Tony_老七 146

Java8中日期类小结

Java8中表示日期和时间的类主要有这么几个 Instant:表示时刻,不直接对应年月日信息,需要通过时区转换; LocalDateTime:表示与时区无关的日期和时间信息,不直接对应时刻,需要通过时区转换; LocalDate:表示与时区无关的日期,与LocalDateTime相比,只有日期信息,没有时间信息 LocalTime:表示与时区无关的时间,与LocalDateTIme相比,只...

shimmerkaiye的博客 190
上一篇: spring结合quartz的定时的2种方式
下一篇: java 获取今天星期几
肖恩小羊
博客等级 码龄14年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值