`

转自“无名的博客”java 时间日期的方法大全讲解

阅读更多
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版 4.1.1

    无名轻博客PHP版是一款基于PHP+Sqlite平台的简单易用的个人微博系统(miniblog),致力于为您提供快速、稳定,使用上又极其简单、舒适的博客服务。 无名轻博客PHP版 4.1.1 更新日志:2020-08-04 隐藏登录地址,防止...

    无名轻博客.zip

    无名轻博客2.0 PHP源码 短小精悍 附带Nginx伪静态规则 (phpstudy测试通过)

    CPlus_to_Java_Converter;C++转java工具

    CPlus_to_Java_Converter(C++转java);C++转java软件

    无名轻博客php版 v2.0

    无名轻博客是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。 运行环境:PHP&gt;=5.4 pdo_sqlite使用前请修改密码1、默认密码:admin ...

    基于PHP的无名轻博客(miniblog)个人博客系统.zip

    基于PHP的无名轻博客(miniblog)个人博客系统.zip

    基于PHP的无名轻博客(miniblog)个人博客系统源码.zip

    基于PHP的无名轻博客(miniblog)个人博客系统源码.zip 基于PHP的无名轻博客(miniblog)个人博客系统源码.zip 基于PHP的无名轻博客(miniblog)个人博客系统源码.zip 基于PHP的无名轻博客(miniblog)个人博客系统源码.zip ...

    基于PHP的无名PHP轻博客系统源码.zip

    基于PHP的无名PHP轻博客系统源码.zip

    常见梯控日期代码转换表格

    常见梯控日期代码转换

    无名微博 v5

    无名微博客v5无名微博产品特性与优点1.简约摈弃了博客的复杂,汲取了微博的简便,一句话,一段文字,记录你心路历程。电脑/移动模板自适应2.运行环境低一个支持asp的空间,就可以基本运行本程序,如果支持rewrite将...

    无名个人微博系统(MicroBlog)源码.zip

    无名轻博客 v3.0 正式版 更新日志 设置微博座右铭与描述分开 微博昵称用于回复 自动第一张图缩略图 视频自适应 私密描述逻辑修改 评论增加网址字段 收到评论微信提醒 增加浏览量 增加安装程序,使用更方便。

    Java面向对象程序设计方案练习题(1).doc

    构造方法与重载 为"无名的粉"写一个类 class WuMingFen 要求 1.有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup 2.写一个构造方法 以便于简化初始化过程 如 WuMingFen f1 = new ...

    无名轻博客php版 v4.1.1

    为您提供无名轻博客php版下载,无名轻博客php版是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。运行环境:PHP&gt;=5.6 pdo_sqlite无名轻...

    无名轻博客php版 v1.0 正式版

    无名轻博客PHP版介绍 无名轻博客是一款基于php和sqlite的简单易用的个人博客系统(miniblog)。致力于为您提供快速、稳定,且在使用上又极其简单、舒适的博客服务。 运行环境:PHP=5.4 p

    无名轻博客 v2.0 正式版.zip

    无名轻博客 v2.0 正式版 更新日志 1.密码保存到数据库中,采用md5双层加密。 2.增加博客关键词配置 3.增加侧栏开关 4.文章增加关键词配置 5.增加文章分类(伪分类) 无名轻博客截图 相关阅读 同类推荐:站长...

    PHP实例开发源码-无名轻博客(miniblog)个人博客系统.zip

    PHP实例开发源码—无名轻博客(miniblog)个人博客系统.zip PHP实例开发源码—无名轻博客(miniblog)个人博客系统.zip PHP实例开发源码—无名轻博客(miniblog)个人博客系统.zip

    无名微博 v5.zip

    无名微博产品特性与优点 1.简约 摈弃了博客的复杂,汲取了微博的简便,一句话,一段文字,记录你心路历程。 2.运行环境低 一个支持asp的空间,就可以基本运行本程序,如果支持aspjpeg组件和rewrite组件将获取更...

    无名轻博客ASP版 5.0

    无名轻博客ASP版是一款基于Asp和Access平台的简单易用的个人微博系统(miniblog),致力于为您提供快速、稳定,且在使用上又极其简单、舒适的微博服务。 无名轻博客ASP版 5.0 更新日志:2019-05-30 编辑器精简+...

    无名轻博客v4.1.1正式版.txt

    无名轻博客v4.1.1正式版

    无名轻博客php版 v4.1.1.zip

    无名轻博客php版 v4.1.1.zip

    PHP实例开发源码—无名轻博客(miniblog)个人博客系统.zip

    PHP实例开发源码—无名轻博客(miniblog)个人博客系统.zip

Global site tag (gtag.js) - Google Analytics