Java日期小结
Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象. 我们写了两篇文章, 这是第一篇, 我们将大概的学习日期, 日期格式, 日期的解析和日期的计算.
我们将讨论下面的类:
1、具体类(和抽象类相对)java.util.Date
2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat
3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar
具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.
Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.
一、创建一个日期对象
让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.
import java.util.Date;
public class DateExample1 {
public static void main(String[] args) {
// Get the system date/time
Date date = new Date();
System.out.println(date.getTime());
}
}
在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期.
那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.
二、日期数据的定制格式
假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample2 {
public static void main(String[] args) {
SimpleDateFormat bartDateFormat =
new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
}
}
只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.
三、将文本数据解析成日期对象
假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象.
例子程序:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExample3 {
public static void main(String[] args) {
// Create a date formatter that can parse dates of
// the form MM-dd-yyyy.
SimpleDateFormat bartDateFormat =
new SimpleDateFormat("MM-dd-yyyy");
// Create a string containing a text date to be parsed.
String dateStringToParse = "9-29-2001";
try {
// Parse the text version of the date.
// We have to perform the parse method in a
// try-catch construct in case dateStringToParse
// does not contain a date in the format we are expecting.
Date date = bartDateFormat.parse(dateStringToParse);
// Now send the parsed date as a long value
// to the system output.
System.out.println(date.getTime());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
五、使用标准的日期格式化过程
既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式.
import java.text.DateFormat;
import java.util.Date;
public class DateExample4 {
public static void main(String[] args) {
Date date = new Date();
DateFormat shortDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.SHORT,
DateFormat.SHORT);
DateFormat mediumDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.MEDIUM,
DateFormat.MEDIUM);
DateFormat longDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.LONG);
DateFormat fullDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL);
System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
}
注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释.
运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容:
9/29/01 8:44 PM
Sep 29, 2001 8:44:45 PM
September 29, 2001 8:44:45 PM EDT
Saturday, September 29, 2001 8:44:45 PM EDT
六、Calendar 类
我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类. 就如我们前面提到的那样, Calendar 类中的方法替代了Date 类中被人唾骂的方法.
假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号.
import java.util.GregorianCalendar;
import java.util.Date;
import java.text.DateFormat;
public class DateExample5 {
public static void main(String[] args) {
DateFormat dateFormat =
DateFormat.getDateInstance(DateFormat.FULL);
// Create our Gregorian Calendar.
GregorianCalendar cal = new GregorianCalendar();
// Set the date and time of our calendar
// to the system&s date and time
cal.setTime(new Date());
System.out.println("System Date: " +
dateFormat.format(cal.getTime()));
// Set the day of week to FRIDAY
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
System.out.println("After Setting Day of Week to Friday: " +
dateFormat.format(cal.getTime()));
int friday13Counter = 0;
while (friday13Counter <= 10) {
// Go to the next Friday by adding 7 days.
cal.add(GregorianCalendar.DAY_OF_MONTH, 7);
// If the day of month is 13 we have
// another Friday the 13th.
if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) {
friday13Counter++;
System.out.println(dateFormat.format(cal.getTime()));
}
}
}
}
在这个例子中我们作了有趣的函数调用:
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
和:
cal.add(GregorianCalendar.DAY_OF_MONTH, 7);
set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五. 注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. add 方法让我们能够在日期上加上数值. 润年的所有复杂的计算都由这个方法自动处理.
我们这个例子的输出结果是:
System Date: Saturday, September 29, 2001
当我们将它设置成星期五以后就成了: Friday, September 28, 2001
Friday, September 13, 2002
Friday, December 13, 2002
Friday, June 13, 2003
Friday, February 13, 2004
Friday, August 13, 2004
Friday, May 13, 2005
Friday, January 13, 2006
Friday, October 13, 2006
Friday, April 13, 2007
Friday, July 13, 2007
Friday, June 13, 2008
七、时间掌握在你的手里
有了这些Date 和Calendar 类的例子, 你应该能够使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 创建许多方法了.
在下面的文章中, 我们将讨论更高级的Date 和 Calendar 类的使用技巧, 包括时区和国际化的格式. 我们还会考察两个日期类 java.sql.Date 和 java.util.Date 之间的区别.
分享到:
- 2009-02-04 20:11
- 浏览 901
- 评论(0)
- 论坛回复 / 浏览 (0 / 2114)
- 查看更多
相关推荐
mssql 日期函数总结 MS SQL Server 提供了丰富的日期函数,开发中经常会用到。下面总结了常用的日期函数: 1. 获取当前时间 `GETDATE()` 函数用于获取...这些日期函数可以帮助开发者更方便地处理日期相关的操作。
### Oracle中的日期处理总结 #### 一、获取当前日期与时间 在Oracle数据库中,我们可以通过多种方式来获取系统的当前日期或时间。...以上就是关于Oracle中日期处理的相关知识点总结,希望对你有所帮助。
Oracle数据库在日期处理方面提供了丰富的功能,这使得开发者可以方便地...理解并熟练掌握这些日期处理方法对于在Oracle数据库环境中编写SQL查询和存储过程至关重要,能够帮助开发者有效地处理和分析日期相关的数据。
总的来说,Java 8的日期和时间API极大地提高了处理日期的便利性和可读性,使得开发人员能够更加高效地处理各种日期相关的业务逻辑。在实际开发中,了解并熟练掌握这些API将对提升代码质量与效率大有裨益。
### MySQL日期数据类型与时间类型...通过以上总结,我们可以看到MySQL提供的日期和时间数据类型及其相关函数非常实用且强大,能够满足大多数应用的需求。掌握这些类型和函数的使用方法,对于开发人员来说是非常有益的。
Java提供了多种工具和API来帮助开发者处理日期相关的任务,如计算未来日期、格式化日期以及解析文本数据等。本文将详细介绍Java中的`java.util.Date`、`java.text.DateFormat`、`java.text.SimpleDateFormat`、`java...
16. **GET_WEEK_INFO_BASED_ON_DATE**:这个函数根据给定的日期返回与星期相关的信息,例如该日期是星期几,以及该日期在当前年中的第几周。 这些ABAP日期函数在处理业务逻辑、报表生成和用户界面交互时起着至关...
这篇文档主要总结了Java中关于日期处理的一些常用函数,涵盖了`Calendar`, `Date`, `SimpleDateFormat`类以及如何进行日期的格式化、计算和转换。以下是这些知识点的详细解释: 1. **Calendar 类的使用**: - `...
总结起来,这些代码示例提供了在JavaScript中进行日期和日期时间校验的方法。它们利用正则表达式进行初步格式检查,然后使用 `Date` 对象进行进一步的合法性验证。这样的校验机制对于确保用户输入的有效性至关重要,...
R语言日期的表示和运算详细总结 R语言中的日期表示和运算是非常重要的概念,本文将详细总结R语言日期的表示和运算,...R语言中的日期表示和运算非常灵活和强大,掌握这些知识可以帮助我们更好地处理日期相关的任务。
本文将深入探讨这种“类似携程网日期选择”和“elong日期选择”的实现方式、设计考虑因素以及相关的技术知识点。 首先,我们需要了解日期选择器的基本设计。通常,这类组件会提供一个日历视图,用户可以通过点击...
总结起来,这个项目主要涵盖了uniapp的组件使用、日期选择器的实现、HBuilder环境的运用以及日期格式化等相关知识点。通过学习和实践,开发者可以深入理解如何在uniapp中创建和定制日期组件,以满足不同场景下的日期...
SQL Server 日期函数详解 ...本文总结了 SQL Server 中的日期函数,包括字符转日期、日期转字符串等方面的知识点。日期函数是数据库管理系统中非常重要的一部分,掌握日期函数可以帮助开发者更好地处理日期和时间数据。
### Java与日期相关的知识点 #### 一、概述 在Java编程语言中,处理日期和时间是非常常见的需求之一。本文档提供了关于如何在Java中处理日期的一些基础知识,包括日期的获取及格式转换等内容。 #### 二、Java日期...
获取指定日期的时间对象,若为空则默认为当前时间。 代码如下:var date=dateTo.getTime()获取毫秒数,起止时间为1970年的那个时间 代码如下:var y=date.getFullYear();获取年份 代码如下:var mm=date.getMonth()+1;...
开发者可以通过学习和使用这个控件,提升用户体验,优化项目中的日期相关功能。在实际工作中,我们可以根据项目的具体需求,对提供的压缩包进行解压、研究,然后进行适当的定制和整合,使其无缝融入我们的应用程序。
daterangepicker插件使用总结 daterangepicker是一款功能强大且灵活的日期时间范围选择插件,它可以帮助开发者快速实现日期时间选择、日期范围选择等功能。本文将详细介绍daterangepicker插件的使用方法,并提供...
- **DateTimeToSystemTime**: 将 `TDateTime` 转换为 `TSystemTime` 类型,便于调用 Windows API 中与系统时间相关的函数。 - **DateTimeToUnix**: 将 `TDateTime` 转换为 Unix 时间戳(自 1970 年 1 月 1 日午夜...
通过设置控件的格式、获取和设置日期,以及处理用户选择的事件,我们可以构建出用户友好的界面来处理日期和时间相关的功能。在实际编程中,结合适当的错误处理和用户反馈机制,可以确保应用程序的稳定性和用户体验。