Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象.
Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.
一、创建一个日期对象
使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.
Date date = new Date();
System.out.println(date.getTime());
上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期.
二、日期数据的定制格式
定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:
SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
Date date = new Date();
System.out.println(bartDateFormat.format(date));
还有一种获得系统当前的时间:年,月,日,时,分,秒:『自己加上的』
SimpleDateFormat dteFormat=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String dte=dteFormat.format(new Date());
System.out.println(dte);
只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01.
下面是一些格式:
Date and Time Pattern
Result
"yyyy.MM.dd G 'at' HH:mm:ss z" |
2001.07.04 AD at 12:08:56 PDT |
"EEE, MMM d, ''yy" |
Wed, Jul 4, '01 |
"h:mm a" |
12:08 PM |
"hh 'o''clock' a, zzzz" |
12 o'clock PM, Pacific Daylight Time |
"K:mm a, z" |
0:08 PM, PDT |
"yyyyy.MMMMM.dd GGG hh:mm aaa" |
02001.July.04 AD 12:08 PM |
"EEE, d MMM yyyy HH:mm:ss Z" |
Wed, 4 Jul 2001 12:08:56 -0700 |
"yyMMddHHmmssZ" |
010704120856-0700 |
三、将文本数据解析成日期对象
假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象.
SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
String dateStringToParse = "9-29-2001";
try {
Date date = bartDateFormat.parse(dateStringToParse);
System.out.println(date.getTime());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
四、使用标准的日期格式化过程
既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式.
Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
DateFormat mediumDateFormat =DateFormat.getDateTimeInstance( DateFormat.MEDIUM, teFormat.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.
运行例子程序的时候, 它将向标准输出设备输出下面的内容:
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 类
假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号.
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
GregorianCalendar cal = new GregorianCalendar();
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
GregorianCalendar类提供处理日期的方法。一个有用的方法是add().使用add()方法,你能够增加象年,月数,天数到日期对象中。要使用add()方法,你必须提供要增加的字段,要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法计算未来80天的一个日期。在Jules的<环球80天>是一个重要的数字,使用这个程序可以计算Phileas Fogg从出发的那一天1872年10月2日后80天的日期:
GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);
worldTour.add(GregorianCalendar.DATE, 80);
Date d = worldTour.getTime();
DateFormat df = DateFormat.getDateInstance();
String s = df.format(d);
System.out.println("80 day trip will end " + s);
五、实现日期以天数的加减:
/* 将当前日期加减n天数。
* 如传入字符型"-5" 意为将当前日期减去5天的日期
* 如传入字符型"5" 意为将当前日期加上5天后的日期
* 返回字串 例(1999-02-03)
*/
public String dateAdd(String to)
{
//日期处理模块 (将日期加上某些天或减去天数)返回字符串
int strTo;
try {
strTo = Integer.parseInt(to);}
catch (Exception e) {
System.out.println("日期标识转换出错! : \n:::" + to + "不能转为数字型");
e.printStackTrace();
strTo = 0;
}
Calendar strDate = Calendar.getInstance(); //java.util包,设置当前时间
strDate.add(strDate.DATE, strTo); //日期减 如果不够减会将月变动 //生成 (年-月-日)
String meStrDate = strDate.get(strDate.YEAR) + "-" +String.valueOf(strDate.get(strDate.MONTH)+1) + "-" + strDate.get(strDate.DATE);
return meStrDate;
}
分享到:
相关推荐
无名轻博客php版v4.1.1是一款基于PHP编程语言开发的开源博客系统,专为个人或小团队提供简洁、高效的博客搭建方案。这个版本的更新可能包含了一些优化和修复,使得用户在使用过程中体验更加流畅。下面将详细探讨这款...
在无名轻博客中,这个目录可能包含了博客主题相关的视觉元素和前端功能。 `app`目录很可能包含了博客的核心业务逻辑和数据处理部分,比如用户管理、文章存储、评论功能等。在许多PHP框架中,这样的目录结构是常见的...
《C++到Java转换器:理解跨语言编程的挑战与实践》 在计算机科学领域,跨语言编程是一项关键技能,特别是在需要利用不同编程语言的优势时。C++和Java是两种广泛应用且具有各自特点的编程语言。C++以其高效、灵活和...
【标题】"基于PHP的无名PHP轻博客系统源码.zip"揭示了这是一个采用PHP编程语言开发的轻量级博客系统。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其适合Web开发,可以嵌入到HTML中进行动态网页...
无名轻博客(miniblog)是一个基于PHP语言开发的个人博客系统,专为喜欢记录生活、分享技术或表达思想的用户设计。这个博客系统简洁、轻量,易于部署和维护,适合初学者和有一定编程基础的用户使用。下面将详细阐述PHP...
无名轻博客是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。 运行环境:PHP>=5.4 pdo_sqlite使用前请修改密码1、默认密码:admin ...
无名轻博客PHP版是一款基于PHP+Sqlite平台的简单易用的个人微博系统(miniblog),致力于为您提供快速、稳定,使用上又极其简单、舒适的博客服务。 无名轻博客PHP版 4.1.1 更新日志:2020-08-04 隐藏登录地址,防止...
面向对象编程是Java的核心特性,本系列练习题旨在帮助学习者掌握类的成员变量、构造方法、以及相关方法的设计和使用。以下是对每个练习题的详细解析: 【练习题01】:此题旨在理解类的成员变量。成员变量是类的属性...
本资源汇总了 Java 面向对象编程的基本概念和实践练习,涉及到类的成员变量、构造方法、方法重载、get 和 set 方法等方面。 类的成员变量是面向对象编程的基本概念之一。类的成员变量是指类中定义的变量,它可以是...
无名微博客v5无名微博产品特性与优点1.简约摈弃了博客的复杂,汲取了微博的简便,一句话,一段文字,记录你心路历程。电脑/移动模板自适应2.运行环境低一个支持asp的空间,就可以基本运行本程序,如果支持rewrite将...
《无名版数据分析方法介绍》是一本专注于教会读者如何运用数据进行有效分析的教材,旨在帮助读者掌握如何利用数据来说话,从而在决策过程中提供有力的依据。这本书特别关注于销售数据分析,它不仅介绍了基本的概念和...
无名轻博客 v3.0 正式版 更新日志 设置微博座右铭与描述分开 微博昵称用于回复 自动第一张图缩略图 视频自适应 私密描述逻辑修改 评论增加网址字段 收到评论微信提醒 增加浏览量 增加安装程序,使用更方便。
"无名工作室个人博客 - ASP源码.zip"这个压缩包包含了某个个人博客的源代码,很可能是用ASP语言编写的。博客系统通常会涉及到用户登录、文章发布、评论管理、分类导航等功能,因此源码中可能包含以下组件: 1. 登录...
为您提供无名轻博客php版下载,无名轻博客php版是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。运行环境:PHP>=5.6 pdo_sqlite无名轻...
无名轻博客PHP版介绍 无名轻博客是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。 运行环境:PHP=5.4 p
无名轻博客 v2.0 正式版 更新日志 1.密码保存到数据库中,采用md5双层加密。 2.增加博客关键词配置 3.增加侧栏开关 4.文章增加关键词配置 5.增加文章分类(伪分类) 无名轻博客截图 相关阅读 同类推荐:站长...
很老的一个java游戏,有点现在网游的模式。
Java提供了一系列的访问控制符来设置基于类、变量、方法及构造方法等不同等级的访问权限。 类的组成部分包括成员变量和方法。成员变量是类的属性,方法是类的行为。构造方法是类的特殊方法,用于初始化对象的状态。...
需要注意的是,如果没有指定包(package),那么Java程序的主类(包含`main()`方法)可以直接通过`java ClassName`运行。如果在包内,需要使用`java package.className`。 4. **类与对象**:Java是面向对象的语言,...
在命令行中输入`java Test`,这里的`Test`是主类的全限定名(包括包名,如果没有指定包名,则默认为无名包),JVM会加载并执行`Test.class`中的`main`方法,这是Java程序的入口点。 `main`方法的定义如下: ```java...