目前要给公司出一些数据,美其名曰:报表。
一个以 用数据来说话
为理念的公司,这个东西会遍地可见。
其中一大重点就是计算时间,比如典型的有,同期数据,包括去年的同一天,去年的同一周,去年的同一个月,上一周,上两周,上个月的上两周,等等。
如果用Java自带的Canlendar,估计大家都得吐血,难看难懂。
所以使用了joda
这个工具,居然公司的平台系统框架中早编译过此包。推荐!
学习joda的地方就是搜博客和看joda官方的文档了,其中推荐一个链接
,感谢作者无私奉献!
--------
另外记录一些碰到的细节。
去年的同一周
细节:
#1 一年有365/366天,即52周多1天或2天,这个是固定的;但见#3讨论。
#2 那么多出来的一两天,怎么处理呢:算入下年的第一周里。
比如我费劲儿找到的2001-12-31就是一年最后一天,而且恰是周一,本来是第53周,但纪年法把他算作下年的第一周里,即2001
-12-31是2002
年的第 1 周的周一。
#3 递减52周,并不准确。
比如2010-11-14为2010年的第45周,递减52周后,却为2009年的46周。郁闷吧。
原因:每年都会“结余”1到2天,而且这些天肯定在一个周内;年数多了,必然结余的天数比较多;以52周往回作减法的前提假设是:1年就等于52周,显然不对;
另外:你怀疑这些“结余”出来的天组成的周,会放入哪个年份呢?1年固定52周吗?!
看下面程序找出来的结果,日期为每年的最后一天即xxxx-12-31:
===============================
2000-12-31 是2000年的周次, 52
2001-12-31 是2002年的周次, 1
2002-12-31 是2003年的周次, 1
2003-12-31 是2004年的周次, 1
2004-12-31 是2004年的周次, 53
2005-12-31 是2005年的周次, 52
2006-12-31 是2006年的周次, 52
2007-12-31 是2008年的周次, 1
2008-12-31 是2009年的周次, 1
2009-12-31 是2009年的周次, 53
根据统计这个结果+每年仅仅“结余”1到2天,我推论:
#1 没有相邻的两年都为53周;
#2 每5年左右出现一次53周的年份;
即今年2009年是53周,那么下次是53周的年份大约为2009+5=2014年左右(2004、2005、2006)都可能。
原因:365%7=1; 366%7=2; 366天的年份基本为4的倍数;
所以:5到6年大约为5个1
+
1个2
我统计了1900年至今的年份,基本正确。
计算方法1
:这种方法周数能对应准确,但处理53周的年份需要特殊对待。
#1 计算出当期比如2010-11-14是本年第几周,是算作所在周-年的第几周。
#2 去年同期就是 往前算一年(#1中的年份减去1);找这个年的同一周;
#3 如果有53,而上年没有的话,之后用最后一周即52周了;
具体用joda实现的代码就不贴了~
计算方法2
:
#1 用上一年的同一天 所在的周
这种方法比较简单,但是闰年时,2月份的日期需要处理一下; 周数也对不上;
计算方法
3
:
#1 递减52周
此方法周数对不上,上面已经说过了。
待有心得,继续补充。
。
。
。
分享到:
相关推荐
### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点概览 根据提供的资料,“Java李兴华学习笔记之Java常用类库”这份文档来源于北京MLDN软件实训中心的教学资料,主要涵盖了Java编程语言中常用类库...
Java.util 包是 Java 语言中一个非常实用的工具类库,提供了一些实用的方法和数据结构。下面我们将详细讲解 Java.util 包中的重要类和方法。 1. 日期类 Date 日期类 Date 是 Java.util 包中一个非常重要的类,封装...
java常用类库 主要方法分析 pdf 文件 实例讲解 StringBuffer类 Runtime类 Locable类 ResourceBundle类 System类 Date类 Calendar类 DateFormat类 Math类
2. **java.util**:提供了数据结构(如ArrayList、LinkedList、HashSet和HashMap)和实用工具类(如Date、Calendar和Random)。集合框架是这个包的核心,它定义了接口(如List、Set和Map)和实现这些接口的类。 3. ...
以下将详细讲解几个在Java开发中不可或缺的基础核心类库。 1. **Java.lang**: 这是Java中最基础的包,它包含了一些最核心的类,比如`String`、`Integer`、`System`、`Math`等。`String`类用于处理文本字符串,`...
9. **Java API和标准库**:介绍常用的Java类库,如Math类、Date类、File类等。 接下来,我们关注两个源代码文件`HelloWorld.java`和`NullPoint.java`。通常,`HelloWorld.java`是一个新手入门的示例,展示如何编写...
这个压缩包很可能是包含了关于这些类库的讲解、示例代码和练习,帮助新手快速理解和应用Java的核心功能。 1. **Java 核心类库**:Java的核心类库,也称为Java标准版(Java SE)类库,是所有Java程序的基础。它包括`...
9. **Java标准库API**:介绍Java SE API的常用类库,如Math、Date/Time、XML解析、反射、注解等。 10. **实战案例**:提供各种实际应用场景下的代码示例,如Web开发、数据库操作、图形用户界面(GUI)编程等,帮助...
在培训中,还会详细讲解如何使用`java.time`包进行日期和时间操作,这是Java 8引入的新特性,比旧的`java.util.Date`和`java.util.Calendar`更易用、更强大。此外,异常处理(try-catch-finally)、多线程(Thread和...
7. **Java标准库API**:可能会详细介绍Java标准库中的各种类和方法,如Math类、Date和Calendar类、StringBuilder类等。 8. **JDBC数据库操作**:如果涉及到数据库,会介绍如何使用Java进行数据库连接、查询、插入、...
日期时间处理在Java中由java.util.Date和java.time包提供。java.util.Calendar是一个抽象类,代表时间和日期,而java.time包(自Java 8引入)提供了更强大且易于使用的API,如LocalDate、LocalTime、LocalDateTime等...
031105_【第11章:Java常用类库】_日期操作类(Date、Calendar)笔记.pdf 031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得...
学习Java就是学习其强大的类库API,这部分可能涵盖常用类的使用,如Date、Calendar、Math等,以及集合框架的深入应用。 8. **异常处理(java_base3_exception.ppt)** 异常处理是Java编程中的重要一环,学习者...
Java 语言基础是编程学习的重要部分,本章节主要讲解了Java中的数组这一核心概念。数组是一种复合数据类型,由相同类型的元素组成,并按照特定顺序排列。以下是对各个知识点的详细阐述: 1. **认识Java语言**:Java...
IBM-ETP(IBM Education Training Program)提供的"Java 常用类讲解2"培训课程,显然是为了帮助开发者深入理解Java的核心类库,提高编程效率。在这个部分,我们将详细探讨Java中的常用类,以及它们在实际开发中的...
总的来说,Java的基础类库和语言包是Java编程的强大支撑,它们为开发者提供了丰富的工具,涵盖了程序开发的各个方面。掌握这些类库的使用,是成为合格Java程序员的基础。通过不断学习和实践,开发者可以利用这些工具...
本课程详细讲解了java的一些类库的使用,其中包含如下: ? ? ? ?使用java类库方法进行与用户的互动。 使用 String、StringBuffer和StringBuilder来处理字符串,ate和Calendar来处理日期、时间,其中Date是一个已经...
本文将对Java类库中的一些常用类进行归纳和详细讲解。 首先,我们来看`Java.lang`包下的`Enum`。枚举在Java中是一种特殊的类,用于定义一组固定的常量。枚举的定义语法如下: ```java [Modifier] enum enumName{ ...
10. **Java API与标准库**:课程会介绍Java标准库中的常用类和接口,如Date、Calendar、Math等,以及如何使用Java API文档来查找和学习更多的类库。 11. **文件与目录操作**:通过File类和FileInputStream/...