`
lthu
  • 浏览: 59228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java基础-Java中的Calendar和Date类

    博客分类:
  • java
阅读更多
java 代码
  1. Java 语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分。所有的开发者都应该能够计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象。    
  2.   
  3. 创建一个日期对象    
  4.   
  5. 让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数。这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。    
  6.   
  7. import java.util.Date;    
  8.   
  9. public class DateExample1 {    
  10.   
  11. public static void main(String[] args) {    
  12.   
  13. // Get the system date/time    
  14.   
  15. Date date = new Date();    
  16.   
  17. System.out.println(date.getTime());    
  18.   
  19. } }    
  20.   
  21. 在星期六,2001929日,下午大约是6:50的样子,上面的例子在系统输出设备上显示的结果是 1001803809710。值得注意的是我们使用了Date 构造函数创建一个日期对象,这个构造函数没有接受任何参数,而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期。现在我们已经知道了如何获取从197011日开始经历的毫秒数了。我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了。    
  22.   
  23. 日期数据的定制格式    
  24.   
  25. 假如我们希望定制日期数据的格式,比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:    
  26.   
  27. import java.text.SimpleDateFormat;    
  28.   
  29. import java.util.Date;    
  30.   
  31. public class DateExample2 {    
  32.   
  33. public static void main(String[] args) {    
  34.   
  35. SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");    
  36.   
  37. Date date = new Date();    
  38.   
  39. System.out.println(bartDateFormat.format(date));    
  40.   
  41. } }    
  42.   
  43. 只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy",我们就能够指明自己想要的格式。格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分。EEEE是星期,MMMM是月,dd是日,yyyy是年。字符的个数决定了日期是如何格式化的。传递"EE-MM-dd-yy"会显示 Sat-09-29-01。    
  44.   
  45. 将文本数据解析成日期对象    
  46.   
  47. 假设我们有一个文本字符串包含了一个格式化了的日期对象,我们希望解析这个字符串并从文本日期数据创建一个日期对象。我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类。但是这一次,我们使用格式化解析而不是生成一个文本日期数据。我们的例子,显示在下面,将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象。    
  48.   
  49. import java.text.SimpleDateFormat;    
  50.   
  51. import java.util.Date;    
  52.   
  53. public class DateExample3 {    
  54.   
  55. public static void main(String[] args) {    
  56.   
  57. // Create a date formatter that can parse dates of    
  58.   
  59. // the form MM-dd-yyyy.    
  60.   
  61. SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");    
  62.   
  63. // Create a string containing a text date to be parsed.    
  64.   
  65. String dateStringToParse = "9-29-2001";    
  66.   
  67. try {    
  68.   
  69. // Parse the text version of the date.    
  70.   
  71. // We have to perform the parse method in a    
  72.   
  73. // try-catch construct in case dateStringToParse    
  74.   
  75. // does not contain a date in the format we are expecting.    
  76.   
  77. Date date = bartDateFormat.parse(dateStringToParse);    
  78.   
  79. // Now send the parsed date as a long value    
  80.   
  81. // to the system output.    
  82.   
  83. System.out.println(date.getTime());    
  84.   
  85. }    
  86.   
  87. catch (Exception ex) {    
  88.   
  89. System.out.println(ex.getMessage());    
  90.   
  91. }    
  92.   
  93. } }    
  94.   
  95. 使用标准的日期格式化过程    
  96.   
  97. 既然我们已经可以生成和解析定制的日期格式了,让我们来看一看如何使用内建的格式化过程。方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程。下面是我们获取了四个内建的日期格式化过程。它们包括一个短的,中等的,长的,和完整的日期格式。    
  98.   
  99. import java.text.DateFormat;    
  100.   
  101. import java.util.Date;    
  102.   
  103. public class DateExample4 {    
  104.   
  105. public static void main(String[] args) {    
  106.   
  107. Date date = new Date();    
  108.   
  109. DateFormat shortDateFormat = DateFormat.getDateTimeInstance(    
  110.   
  111. DateFormat.SHORT, DateFormat.SHORT);    
  112.   
  113. DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(    
  114.   
  115. DateFormat.MEDIUM, DateFormat.MEDIUM);    
  116.   
  117. DateFormat longDateFormat = DateFormat.getDateTimeInstance(    
  118.   
  119. DateFormat.LONG, DateFormat.LONG);    
  120.   
  121. DateFormat fullDateFormat = DateFormat.getDateTimeInstance(    
  122.   
  123. DateFormat.FULL, DateFormat.FULL);    
  124.   
  125. System.out.println(shortDateFormat.format(date));    
  126.   
  127. System.out.println(mediumDateFormat.format(date));    
  128.   
  129. System.out.println(longDateFormat.format(date));    
  130.   
  131. System.out.println(fullDateFormat.format(date));    
  132.   
  133. }    
  134.   
  135. }    
  136.   
  137. 注意我们在对 getDateTimeInstance的每次调用中都传递了两个值:第一个参数是日期风格,而第二个参数是时间风格。它们都是基本数据类型int(整型)。考虑到可读性,我们使用了DateFormat 类提供的常量: SHORT,MEDIUM,LONG,和 FULL。    
  138.   
  139. 运行我们的例子程序的时候,它将向标准输出设备输出下面的内容:    
  140.   
  141. 9/29/01 8:44 PM    
  142.   
  143. Sep 292001 8:44:45 PM    
  144.   
  145. September 292001 8:44:45 PM EDT    
  146.   
  147. Saturday,September 292001 8:44:45 PM EDT    
  148.   
  149. Calendar 类    
  150.   
  151. 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。    
  152.   
  153. 假设你想要设置,获取,和操纵一个日期对象的各个部分,比方一个月的一天或者是一个星期的一天,为了演示这个过程,我们将使用具体的子类 java.util.GregorianCalendar。 考虑下面的例子,它计算得到下面的第十个星期五是13号。    
  154.   
  155. import java.util.GregorianCalendar;    
  156.   
  157. import java.util.Date;    
  158.   
  159. import java.text.DateFormat;    
  160.   
  161. public class DateExample5 {    
  162.   
  163. public static void main(String[] args) {    
  164.   
  165. DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);    
  166.   
  167. // Create our Gregorian Calendar.    
  168.   
  169. GregorianCalendar cal = new GregorianCalendar();    
  170.   
  171. // Set the date and time of our calendar    
  172.   
  173. // to the system´s date and time    
  174.   
  175. cal.setTime(new Date());    
  176.   
  177. System.out.println("System Date: " + dateFormat.format(cal.getTime()));    
  178.   
  179. // Set the day of week to FRIDAY    
  180.   
  181. cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);    
  182.   
  183. System.out.println("After Setting Day of Week to Friday: " +dateFormat.format(cal.getTime()));    
  184.   
  185. int friday13Counter = 0;    
  186.   
  187. while (friday13Counter <= 10) {    
  188.   
  189. // Go to the next Friday by adding 7 days.    
  190.   
  191. cal.add(GregorianCalendar.DAY_OF_MONTH,7);    
  192.   
  193. // If the day of month is 13 we have    
  194.   
  195. // another Friday the 13th.    
  196.   
  197. if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) { friday13Counter++;    
  198.   
  199. System.out.println(dateFormat.format(cal.getTime()));    
  200.   
  201. }    
  202.   
  203. }    
  204.   
  205. }    
  206.   
  207. }    
  208.   
  209. 在这个例子中我们作了有趣的函数调用:    
  210.   
  211. cal.set(GregorianCalendar.DAY_OF_WEEK,    
  212.   
  213. GregorianCalendar.FRIDAY);    
  214.   
  215. 和:cal.add(GregorianCalendar.DAY_OF_MONTH,7);    
  216.   
  217. set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五。注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性。add 方法让我们能够在日期上加上数值,润年的所有复杂的计算都由这个方法自动处理。    
  218.   
  219. 我们这个例子的输出结果是:    
  220.   
  221. System Date: Saturday,September 292001    
  222.   
  223. 当我们将它设置成星期五以后就成了:    
  224.   
  225. Friday,September 282001    
  226.   
  227. Friday,September 132002    
  228.   
  229. Friday,December 132002    
  230.   
  231. Friday,June 132003    
  232.   
  233. Friday,February 132004    
  234.   
  235. Friday,August 132004    
  236.   
  237. Friday,May 132005    
  238.   
  239. Friday,January 132006    
  240.   
  241. Friday,October 132006    
  242.   
  243. Friday,April 132007    
  244.   
  245. Friday,July 132007    
  246.   
  247. Friday,June 132008    
  248.   
  249. 时间掌握在你的手里    
  250.   
  251. 有了这些Date 和Calendar 类的例子,你应该能够使用 java.util.Date,java.text.SimpleDateFormat,和 java.util.GregorianCalendar 创建许多方法了。   
  252.   
分享到:
评论

相关推荐

    Java 之 Date 和 Calendar 实例

    在Java编程语言中,`Date`和`Calendar`类是处理日期和时间的核心组件。这两个类在不同的Java版本中有着不同的使用方式和功能,对于理解Java时间处理机制至关重要。本篇将深入探讨`Date`和`Calendar`类的实例应用。 ...

    Java基础之Date和Calendar类的使用方法

    Java中的Date和Calendar类是处理日期和时间的核心组件。Date类主要用于表示特定的瞬间,精确到毫秒。在早期版本的Java中,Date类的设计受到批评,因为它的API不直观且容易导致错误。为了解决这些问题,大部分日期和...

    java中时间类Date和Calendar的使用

    Java中的时间类`Date`和`Calendar`是处理日期和时间的核心组件,它们在Java编程中扮演着重要的角色。在Java中,`Date`类主要用来表示特定的瞬间,精确到毫秒。而`Calendar`类则是一个抽象类,提供了比`Date`更灵活的...

    JAVA Calendar,Date类详解

    在Java编程语言中,`Calendar`和`Date`类是处理日期和时间的核心组件。这两个类在处理日期、时间计算以及格式化等任务时扮演着关键角色。理解并熟练运用它们,对于提升Java开发能力至关重要。 `Date`类是Java早期...

    Calendar和Date的转化

    在Java编程语言中,`Calendar`和`Date`是处理日期和时间的重要类。为了更好地理解和使用这两个类之间的转换方法,本文将详细介绍如何将`Calendar`对象转换为`Date`对象,以及如何将`Date`对象转换为`Calendar`对象。...

    java基础--日期.docx

    Java 语言中有多种方式来处理日期和时间,包括使用 Date 类、SimpleDateFormat 类和 Calendar 类。下面我们将详细介绍每种方式的使用和注意事项。 一、Date 类 Date 类是 Java 语言中最基本的日期类型,它可以用来...

    Calendar和Date

    在Java编程语言中,`Calendar`和`Date`类是用于处理日期和时间的核心类。它们在处理日期和时间操作时扮演着重要角色。这里我们将深入探讨这两个类以及它们之间的对比,同时展示如何计算上月某一天的日期以及获取指定...

    JAVA new Date()或Calendar.getInstance().getTime()得到的时间不对

    首先,`java.util.Date` 是Java中的一个基础类,用于表示特定的瞬间,精确到毫秒。当我们使用 `new Date()`,它会返回当前系统时间。然而,这个时间是基于计算机系统的本地时区的。如果系统时区设置不正确,那么获取...

    Java中Date和Calendar常用方法

    总的来说,`Date`和`Calendar`在Java中提供了处理日期和时间的基础功能。虽然`Date`类的直接操作相对简单,但`Calendar`提供了更多灵活性,包括修改时间域和进行日期计算。在实际开发中,我们通常会结合使用这两个类...

    Set_System_Date_and_Time.rar_java-time-and-date_system date设置_计算

    在旧版本的Java中,我们通常使用`java.util.Date`和`java.util.Calendar`类来处理日期和时间,但它们的设计并不直观,易用性较差。现在,`java.time`包提供了一套更现代、更简洁的API,包括`LocalDate`, `LocalTime`...

    Java 之 Date 和 Calendar

    在Java编程语言中,`Date`和`Calendar`类是处理日期和时间的核心组件。这两个类在不同的Java版本中有着不同的用法和功能,对于理解并正确使用它们是Java开发者必备的知识点。 `Date`类在早期的Java版本中被广泛使用...

    Java_Date_日期时间整理

    在 Java 中,可以使用 `java.util.Date` 类来获取服务器端当前日期。可以使用以下代码来获取当前日期: ```java &lt;%@ page import="java.util.Date"%&gt; &lt;% Date myDate = new Date(); %&gt; ``` 二、获取当前年、月、日 ...

    Java-Date 类的学习总结.pdf

    下面是对 Date 类的学习总结,包括计算某一月份的最大天数、Calendar 和 Date 的转化、把字符串转化为 java.util.Date、把字符串转化为 java.sql.Date、格式化输出日期时间、计算一年中的第几星期等。 计算某一月份...

    解析Date & Calendar类

    Java中的Date和Calendar类是处理日期和时间的核心工具。这两个类在Java编程中扮演着重要角色,特别是在处理日期计算、格式化以及与数据库交互时。 1. **java.util.Date** - **字符串转时间为Date对象**: 通过`...

    学习java基础-好用的PPT

    10. **Java API和类库**:Java标准库包含大量预先编写好的类和接口,如Math类用于数学计算,Date和Calendar类处理日期和时间,Swing和JavaFX用于图形用户界面(GUI)开发等。 11. **Java应用领域**:Java不仅用于...

    Java-clock-calendar.rar_时钟 日历_时钟日历

    日历部分通常涉及到对日期和时间的处理,Java的标准库提供了`java.util.Calendar`类和`java.time`包。`Calendar`类是一个抽象类,提供了对日期和时间的全面操作,包括获取和设置年、月、日、小时等信息。而`java....

    JAVA的Date类与Calendar类.docx

    Java中的Date类和Calendar类是处理时间和日期的重要工具。在早期的JDK版本中,Date类是主要的日期时间表示类,但在JDK1.1之后,为了更好地支持国际化和增强功能,推荐使用Calendar类。 Date类: 1. **表示当前时间*...

    JAVA System、Math、Date、DateFormat、Calendar

    在这个"JAVA System、Math、Date、DateFormat、Calendar"的主题中,我们将深入探讨Java标准库中的几个核心类,它们在各种程序设计场景中扮演着至关重要的角色。 首先,`System`类是Java中最基础的类之一,位于`java...

    Date与Calendar详解

    `java.util.Calendar`是Java中用于操作日期和时间的抽象类,提供了比`Date`类更全面的日期和时间操作能力,包括时区支持、日历字段的访问以及日期的加减运算等。 ##### 使用Calendar `Calendar`类是抽象的,不能...

    JavaChineseCalendar

    For example, we want to create a **農曆** object instance with the date 2015-12-16 in Chinese calendar and we know that date is not in a leap month. The code will be, 農曆 date = 農曆.建立(2015, 12,...

Global site tag (gtag.js) - Google Analytics