题目已过期。
要求:
汇付的一笔试题,要求计算给定日期的前一天,日期格式"YYYYMMDD",不能使用Date、Calendar相关日期的操作方法
步骤:
1、先分割出给定日期的年、月、日,转成int类型
2、日期-1,分为1号和非1号
1号特殊操作,月份-1,需判断是否闰年,天数为最大(特殊月)
月份-1,需判断是否是减成了0,是的话年-1,月12,日31(跨年)
3、toString 年、月、日转String并补零
package net.leo.java.date; /** * 要求计算给定日期的前一天 * 不使用java API中的Date和Calendar * 日期格式如“20101202” * * @title YesdayNoAPI * @description * @author cxh * @version * @create_date 2013-7-10 * @copyright (c) */ public class YesdayNoAPI { // 2月天数 private int MAXDAYS_FEBRUARY; private int year, month, day; public static void main(String[] args) { String todayStr = "00100101"; System.out.println("today is:" + todayStr); YesdayNoAPI ins = new YesdayNoAPI(); ins.getYesday(todayStr); System.out.println(ins.parseString()); } /** * 分割年月日 * * @description * @author cxh * @param todayStr */ private void split(String todayStr) { year = Integer.valueOf(todayStr.substring(0, 4)); month = Integer.valueOf(todayStr.substring(4, 6)); day = Integer.valueOf(todayStr.substring(6)); } /** * 获取前一天 * * @description * @author cxh * @param todayStr */ public void getYesday(String todayStr) { split(todayStr); // 天数-1 if (day == 1) { decMonth(); } else { day -= 1; } } /** * 月-1 说明天数为1号 * * @description * @author cxh */ private void decMonth() { switch (--month) { // 跨年 case 0: --year; month = 12; day = 31; break; case 2: // 润平判断 isLeapYear(); day = MAXDAYS_FEBRUARY; break; case 1: case 3: case 5: case 7: case 8: case 10: day = 31; break; default: day = 30; break; } } /** * 判断是否闰年 赋值2月天数 * * @description * @author cxh */ private void isLeapYear() { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { MAXDAYS_FEBRUARY = 29; } else { MAXDAYS_FEBRUARY = 28; } } /** * toString * * @description * @author cxh * @return */ private String parseString() { String dayStr = "" + day; String monthStr = "" + month; String yearStr = "" + year; // 补0 if (day < 10) { dayStr = "0" + day; } if (month < 10) { monthStr = "0" + month; } for (int i = yearStr.length(); i < 4; i++) { yearStr = "0" + yearStr; } return "yesday is:" + yearStr + monthStr + dayStr; } }
结果:
情况1:遇到2月
today is:20100301
yesday is:20100228
情况2:遇到跨年
today is:20100101
yesday is:20091231
情况3:遇到跨世纪
today is:00100101
yesday is:00091231
相关推荐
这个"jdk_api函数大全"可能是一个文档集合,其中以中文形式详细解释了JDK API中的各个函数,旨在帮助中国开发者更方便地理解和使用Java API。通过这样的中文版文档,开发者可以更容易地学习和查阅API,避免语言障碍...
jdk1.8函数式接口.mdjdk1.8函数式接口.mdjdk1.8函数式接口.md
JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....
新API更加直观,易于使用,并提供了更好的日期和时间计算功能。 除此之外,JDK1.8还改进了`Map`接口,新增了`putIfAbsent()`, `remove()`, `replace()`等原子操作,以及`forEach()`方法,使得遍历和修改`Map`更加...
对于不熟悉英文的开发者来说,中文版的JDK文档无疑是一个巨大的帮助,它能确保开发者准确理解API的用法,从而提高开发效率。 总的来说,从JDK 1.6到JDK 1.8,Java平台经历了许多重要的演进,这些变化旨在提高开发者...
JDK8,又名Java SE 8(标准版8),是2014年发布的,其最大的变化就是引入了Lambda表达式,这是一种函数式编程的概念,使得编写简洁、高效的并发代码成为可能。此外,JDK8还引入了Stream API,用于处理集合数据,提供...
JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11...
1. **Lambda表达式**:JDK1.8引入了函数式编程的概念,允许开发者使用简洁的lambda表达式来表示匿名函数,提高了代码的可读性和可维护性。 2. **方法引用和构造器引用**:除了lambda表达式,还增加了方法引用和构造...
在接口中添加默认方法是JDK 8的一个重要特性,它允许在不破坏向后兼容性的情况下为接口添加新方法。默认方法通过在方法声明前加上`default`关键字实现,可以有实现代码,这样接口的实现类可以选择重写或者直接使用...
Java Development Kit (JDK) 8 是Java编程语言的一个重要版本,它引入了许多新特性、改进和优化,极大地提升了开发者的生产力。这个压缩包“jdk8_API”包含了JDK 8的官方帮助文档,它是开发者理解和使用JDK 8的重要...
在此之前,企业可以免费下载和使用Oracle JDK进行商业开发和运行,但自该日期起,Oracle改变了其授权策略,开始对某些商业用途的JDK收取费用。 Oracle JDK 1.8,也被称为Java SE 8,是Java的一个重要版本,它引入了...
1. **lambda表达式**:这是JDK8最显著的改变之一,它简化了处理函数式编程风格的代码。Lambda表达式允许我们将匿名函数作为方法参数传递,使得代码更简洁,可读性更强。例如,我们可以使用lambda表达式来实现...
《32位1.8版本JDK详解》 32位1.8版本的Java Development Kit(JDK)是Oracle公司推出的一个针对32位操作系统的...对于Java开发者来说,理解和掌握32位1.8版本JDK的特性和使用方法,是提升开发技能不可或缺的一部分。
JAVA的中文API,找了很久,喜欢JAVA的朋友可以参考下,一共4个压缩包
9. **并发改进**:JDK 8对`ForkJoinPool`和`CompletableFuture`进行了优化,提供了一种更有效的并行计算方式,有助于提升多核环境下的程序性能。 10. **类型推断增强**:编译器现在能更好地推断局部变量的类型,...
这提供了另一种简化代码的方式,尤其是在使用函数式接口时。 4. **Stream API** Stream API是JDK8的一大亮点,它为处理集合数据提供了一种声明式的编程风格。通过一系列操作(如map、filter、reduce)可以实现对...
JDK 8 API文档是基于Java 8版本的,这是Java历史上一个重要的里程碑,引入了许多创新特性,例如lambda表达式、函数式接口、Stream API以及Date和Time API的改进。Lambda表达式使得代码更加简洁和可读,函数式接口为...
JDK 1.8引入了Lambda表达式,这是一种简洁的函数式编程语法,可以用于表示无状态、无副作用的函数。Lambda表达式允许将匿名函数作为方法参数传递,或者用作方法返回值。例如,`Runnable r = () -> System.out....
6. **Date和Time API增强**:JDK 1.8对`java.time`包进行了彻底改造,引入了`LocalDate`、`LocalTime`、`LocalDateTime`等新类,提供了更强大、更易于使用的日期和时间API。 7. **Optional类**:`Optional`类是用来...
此外,JDK8还包含了新的日期和时间API(java.time包),取代了过时的java.util.Date和Calendar类,提供更强大且易于使用的日期处理功能。方法引用和默认方法也是JDK8的重要特性,增强了接口的功能。 在Windows 64位...