java日期格式化

JAVA时间格式化实例

日期格式化

importjava.util.Date; 

importjava.text.SimpleDateFormat; 

classdayTime 

public staticvoid main(String args[]) 

Date nowTime=newDate(); 

System.out.println(nowTime); 

SimpleDateFormattime=new SimpleDateFormat("yyyy MM dd HH mm ss"); 

System.out.println(time.format(nowTime)); 

}

1、通过MessageFormat转化

String      dateTime =MessageFormat.format("{0,date,yyyy-MM-dd-HH-mm:ss:ms}" ,

                                  new Object[]       {

                                      newjava.sql.Date(System.currentTimeMillis())

                                  });

说明:       yyyy-MM-dd-HH-mm:ss:ms      yyyy MM dd (大写为24进制,小写为12进制)      mm ss 微妙ms

2、修改数据库时用

queryDataSet.setDate("dateField",new java.sql.Date(new java.util.Date().getTime()));

queryDataSet.setDate("dateField",new java.sql.Date.valueOf("2005-05-03"));

3、通过SimpleDateFormat 转化

SimpleDateFormatdateFm = new SimpleDateFormat("yyyy-MM-dd"); //格式化当前系统日期

String dateTime= dateFm.format(new java.util.Date());

4、具体讨论

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 100:00:00这一刻之前或者是之后经历的毫秒数.  

一、创建一个日期对象  

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.  

//------------------------------------------------------

importjava.util.Date;  

 

public classDateExample1 

{  

public staticvoid main(String[] args)

{  

      // Get the system date/time  

      Date date = new Date();  

      System.out.println(date.getTime());  

}  

}  

//------------------------------------------------------

在星期六, 2001929, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期.  

那么, 现在我们已经知道了如何获取从197011日开始经历的毫秒数了. 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类java.text.DateFormat 就派得上用场了.  

二、日期数据的定制格式  

假如我们希望定制日期数据的格式, 比方星期六-9-29-2001. 下面的例子展示了如何完成这个工作:

//------------------------------------------------------

importjava.text.SimpleDateFormat;  

importjava.util.Date;  

 

public classDateExample2 

{  

 

public staticvoid 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 的日期对象.

 

//------------------------------------------------------

importjava.text.SimpleDateFormat;  

importjava.util.Date;  

 

public classDateExample3 

{  

 

public staticvoid 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() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式.  

 

//------------------------------------------------------

importjava.text.DateFormat;  

importjava.util.Date;  

 

public classDateExample4 

{  

 

public staticvoid 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, 20018: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.  

 

//------------------------------------------------------

importjava.util.GregorianCalendar;  

importjava.util.Date;  

importjava.text.DateFormat;  

 

public classDateExample5 

{  

 

public staticvoid 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, December13, 2002  

Friday, June 13,2003  

Friday, February13, 2004  

Friday, August13, 2004  

Friday, May 13,2005  

Friday, January13, 2006  

Friday, October13, 2006  

Friday, April13, 2007  

Friday, July 13,2007  

Friday, June 13,2008  

 

六、时间掌握在你的手里  

 

有了这些Date Calendar 类的例子, 你应该能够使用 java.util.Date,java.text.SimpleDateFormat, java.util.GregorianCalendar 创建许多方法了.  

 

5、具体讨论2

这里只讨论java中对日期的几个简单类: 

1.           java.util.Date

2.           java.text.DateFormatAbstract),java.text.SimpleDateFormat

3.           java.util.CalendarAbstract),java.utilGregorianCalendar

 

首先看一下Date类,Date中只提供了几个获得本地时间的方法,具体用法见下:

importjava.util.Date

public classDateFormatTest {

      public DateFormatTest() {

      }

 

      public static void main(String[] args) {

        Date dt=new Date()

        String localeString=dt.toLocaleString()

        String gmtString=dt.toGMTString()

        System.out.println(localeString)

        System.out.println(gmtString)

        System.out.println(dt.getTime())

        System.out.println(System.currentTimeMillis())

      }

}

输出结果为:

2004-12-319:34:04

31 Dec 200401:34:04 GMT

1104456844281

1104456844500

从结果中可以看到,dt.getTime()System.currentTimeMillis()这两个方法得到的时间是相同的。因为Date的构造函数中调用了System.currentTimeMillis()方法来从系统获得当前时间。其结果实际上是从197011日开始到当前所经历的毫秒数。

以下的例子展示的是一个简单的格式化日期的代码:

importjava.text.*

importjava.util.Locale

importjava.util.Date

public classDateFormatTest {

      public DateFormatTest() {

      }

 

      public static void main(String[] args) {

        DateFormat df=DateFormat.getDateInstance()

        SimpleDateFormat defaultSDF=new SimpleDateFormat()

        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd")

        System.out.println(new Date())

        System.out.println(df.format(new Date()))

        System.out.println(defaultSDF.format(new Date()))

        System.out.println(sdf.format(new Date()))

      }}

 

输出结果是:

Fri Dec 31 09:48:19CST 2004

2004-12-31

04-12-31 上午9:48

2004-12-31

 

SimpleDateFormat的构造函数中String中字符的含义列如下表:

Letter Date orTime Component Presentation Examples 

G Era designatorText AD 

y Year Year 1996 96 

M Month in yearMonth July Jul 07 

w Week in yearNumber 27 

W Week in monthNumber 2

D Day in yearNumber 189 

d Day in monthNumber 10

F Day of week inmonth Number 2

E Day in weekText Tuesday Tue

a Am/pm markerText PM

H Hour in day(0-23) Number 0 

k Hour in day(1-24) Number 24

K Hour in am/pm(0-11) Number 0

h Hour in am/pm(1-12) Number 12 

m Minute in hourNumber 30

s Second inminute Number 55 

S MillisecondNumber 978 

z Time zoneGeneral time zone Pacific Standard Time PST GMT-08:00 

Z Time zone RFC822 time zon

上面展示的例子是将Date格式化成我们想要的格式,通常还会遇到需要将有些已经格式好的String再解析成Date的问题。在下面的文章中将会讲到。

importjava.text.*;

importjava.util.Locale;

importjava.util.Date;

public classDateFormatTest {

      public DateFormatTest() {

      }

      public static void main(String[] args) {

        String dateToparse="30-12-2004"

        SimpleDateFormat sdf=newSimpleDateFormat("dd-MM-yyyy")

       Date dt=new Date()

       try{

         dt=sdf.parse(dateToparse)

         System.out.print(dt)

       }catch(Exception e){

         e.printStackTrace();

      }}}

 

Java日期格式化实例

一般常用格式化类DateFormatSimpleDateFormatformat(Date time)方法进行格式化日期.

1. 首先介绍java.text.SimpleDateFormat.

public classSimpleDateFormat extends DateFormat

SimpleDateFormat

是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstancegetDateInstance getDateTimeInstance 来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用 applyPattern 方法来修改格式模式。

日期和时间模式

日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 'Z' 'a' 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符 'A' 'Z' 'a' 'z' 都被保留):

示例

以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间 2001-07-0412:08:56

常用构造方法 :

 SimpleDateFormatsFormat = new SimpleDateFormat(String pattern);

或者

SimpleDateFormatsFormat = new SimpleDateFormat();

sFormat.applyPattern(Stringpattern); 

或者

DateFormatdateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());

//具体可取DateFormat.SHORT,DEFAULT,LONG,FULL

 2. 常用的日期类有CalendarGregorianCalendar,后者是前者的子类,并拓展了一些功能,例如是否为闰年等方法.两者用法基本类似

note: JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。 

 常用构造方法:

Calendar c =Calendar.getInstance();

c.setTime(Datedate);// c.setTime(int year,int month, intday,int hour,int minute , int second);

GregorianCalendargC = new GregorianCalendar( int year,int month, int day,int hour,int minute ,int second ) ;//方法可重载,具体看API

3.示例代码 (这里使用了log4j,只需将代码中的log.info改成相应的System.out.println,置于main()方法中运行即可)

复制代码

public voidtestCalendar(){

       Calendar c1 = Calendar.getInstance();

       c1.setTime(new Date());

       //Calendar中设置的时间超过每项的最大值时,会以减去最大值后的值设置时间,例如月份设置13,最后会变成13-11=02

       Calendar c2 = Calendar.getInstance();

       c2.set(1920, 13, 24, 22, 32, 22);

       //使用pattern

       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-ddH:m:s");

       SimpleDateFormat format2 = new SimpleDateFormat("yy-MM-ddH:m:s");

       SimpleDateFormat format3 = new SimpleDateFormat("y-M-dH:m:s");

       //使用约定格式

DateFormatdateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());

       //获取Calendar中各个属性字段的方法

       log.info("The year now time is " + c1.get(c1.YEAR));

       log.info("The month now time is " + c1.get(c1.MONTH));

       log.info("The day_of_month now time is " +c1.get(c1.DAY_OF_MONTH));

       log.info("The day_of_week now time is " +c1.get(c1.DAY_OF_WEEK));

       log.info("今天是在这个月的第几个星期: " +c1.get(c1.DAY_OF_WEEK_IN_MONTH));

       log.info("The day_of_year now time is " +c1.get(c1.DAY_OF_YEAR));

       //不同模式对应的格式略有不同,有时间可以测试多一点模式

       log.info("yyyy-MM-dd H:m:s-->" + format.format(c1.getTime()));

       log.info("yy-MM-dd H:m:s-->" +format2.format(c1.getTime()));

       log.info("y-M-d H:m:s-->" +format3.format(c1.getTime()));

 log.info("DateFormat.FULL-->" + dateFormat.fomat(c1.getTime()));

       log.info(format.format(c2.getTime()));

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值