DateFormat类

一、DateFormat子类:

DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化和分析日期或时间。DateFormat类中最重要的两个方法是format和parse,简单来说format(是将日期Date类的对象转化为用户所能看懂的字符串形式如2019年1月28日 )parse(是将用户所能看懂的字符串形式的日期转化为日期Date类)

format(Object obj, StringBuffer toAppendTo, FieldPosition pos)格式化对象并将结果文本附加到给定的字符串缓冲区。
format(Date date, StringBuffer toAppendTo, FieldPosition pos)格式化对象并将结果文本附加到给定的字符串缓冲区。
format(Date date)
//obj - 必须是数字或日期。
//toAppendTo - 返回时间字符串的字符串缓冲区。
//pos - 跟踪返回字符串中字段的位置。
//输入时:如果需要,可以使用对齐字段。输出时:对齐字段的偏移量。例如,给定时间文本“1996.07.10 AD at 15:08:56 PDT”,
//如果给定的fieldPosition是DateFormat.YEAR_FIELD,则fieldPosition的开始索引和结束索引将分别设置为0和4。
//请注意,如果同一时间字段在模式中出现多次,则将为该时间字段的第一次出现设置fieldPosition。例如,使用模式“haz(zzzz)”
//和对齐字段DateFormat.TIMEZONE_FIELD将日期格式化为时间字符串“1 PM PDT(Pacific Daylight Time)”,fieldPosition的开始索引和结束索引将设置为5和8,
//返回传递给toAppendTo的字符串缓冲区,附加了格式化文本。
parseObject(String source, ParsePosition pos)解析字符串中的文本以生成对象
parse(String source)解析字符串中的文本以生成对象
parse(String source, ParsePosition pos)解析字符串中的文本以生成对象
//source - 要解析的日期/时间字符串,其中一部分应该被解析。
//pos - ParsePosition具有索引和错误索引信息的对象.输入时,开始解析的位置; on output,解析终止的位置,或解析失败时的起始位置。
//返回Date,如果无法解析输入,则返回null,若为null则抛出NullPointerException

常用静态工厂方法:

(1)getInstance()方法,使用SHORT样式的日期和时间获取格式化的日期和时间程序,输出样式:2019/1/28 下午5:23

(2)getDateInstance()方法,获取具有默认语言环境的默认格式样式的日期格式化程序,输出样式:2019/1/28

   getDateInstance(int style)方法    //style为下面的日期长度参数,如SHORT

   getDateInstance(int style,Locale alocale)方法    //alocale为语言环境,如CHINA

(3)getDateTimeInstance()方法,获取具有默认语言环境的默认格式样式的日期和时间格式化程序,输出样式:2019/1/28 下午5:23:12

   getDateTimeInstance(int datastyle,int timestyle)方法   //datastyle为下面的日期长度参数,timestyle为时间长度参数

   getDateTimeInstance(int datastyle,int timestyle,Locale alocale)方法

(4)getTimeInstance()方法,获取具有默认语言环境的默认格式样式的时间格式化程序,输出样式:下午5:23:12

   getTimeInstance(int style)方法    //style为下面的时间长度参数

   getTimeInstance(int style,Locale alocale)方法    //alocale为语言环境,如CHINA

(5)getCalendar()方法,获取与此日期/时间格式化程序关联的日历。

(6)getNumberFormat()方法,获取此日期/时间格式化程序用于格式化和解析时间的数字格式化程序。

更多详细方法可以参照https://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html

可以将不同的选项传递给这些工厂方法来控制结果的长度; 从SHORT到MEDIUM到LONG到FULL到DEFAULT。确切的结果取决于区域设置,但通常:

SHORT:              2019/1/28                                                        下午5:23

MEDIUM:            2019年1月28日                                              下午5:23:12

LONG:                 2019年1月28日                                              CST 下午5:23:12

FULL:                  2019年1月28日星期一                                  中国标准时间 下午5:23:12

DEFAULT:          2019年1月28日                                              下午5:23:12

实例:(一般通过get...创建对象)

package codeFormat;
import java.text.*;
import java.util.*;
public class ceshi {

	public static void main(String[] args) throws Exception {
        Date date = new Date();
        DateFormat dateFormat1 = DateFormat.getDateInstance();//DateFormat为抽象类所以创建实例的时候不能加new
        DateFormat dateFormat2 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);
        DateFormat dateFormat3 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.DEFAULT, Locale.CHINA);
        System.out.println(dateFormat1.format(date));
        System.out.println(dateFormat2.format(date));
        System.out.println(dateFormat3.format(date));
 
        DateFormat dateFormat4 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
        DateFormat dateFormat5 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);
        DateFormat dateFormat6 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINA);
        DateFormat dateFormat7 = DateFormat.getInstance();
        System.out.println(dateFormat4.format(date));
        System.out.println(dateFormat5.format(date));
        System.out.println(dateFormat6.format(date));
        System.out.println(dateFormat7.format(date));
        try {
        	DateFormat dateFormat8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM, Locale.CHINA);
        	System.out.println(dateFormat8.parse("2019年1月29日 下午2:23:45"));
        }
        catch (ParseException e) {  
            System.out.println(e.getMessage());  
        } 
  
    }


}
运行结果:
2019年1月28日
下午6:02
2019年1月28日星期一 下午6:02:49
2019年1月28日
下午6:02:49
2019年1月28日 CST 下午6:02:49
2019/1/28 下午6:02
Tue Jan 29 14:23:45 CST 2019

另外介绍一下DateFormat的子类SimpleDateFormat类

SimpleDateFormat类:

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期 - >文本),解析(文本 - >日期)和规范化。

日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串,从带引号的字母 'A''Z''a'到 'z'被解释为代表的日期或时间字符串的组件模式字母。可以使用单引号(')引用文本以避免解释。 "''"代表单引号。不解释所有其他字符; 它们只是在格式化过程中被复制到输出字符串中,或​​者在解析过程中与输入字符串匹配。

以下模式字母(从所有其他字符限定 'A''Z'和从'a'到 'z'保留):

字母

日期或时间组件

举例

G

时代指示符

AD

y

1996; 96

M

一年中的月份

July; Jul;07

w

一年中的周数

27

W

一月中的周数

2

D

一年中的天数

189

d

一个月的天数

10

F

一个月中的周数

2

E

一周中的天数

Tuesday; Tue

a

上午/下午标记

AM;PM

H

一天中的小时数(0-23)

0

k

一天中的小时数(1-24)

24

K

上午/下午中的小时数(0-11)

0

h

上午/下午中的小时数(1-12)

12

m

一小时中的分钟数

30

s

一分钟中的秒钟数

55

S

毫秒数

978

z

时区

Pacific Standard Time; PST;GMT-08:00;CST

Z

时区

-0800

SimpleDateFormat类通过自身的构造方法来创建实例化对象:

SimpleDateFormat();使用默认语言环境的默认模式和日期格式符号构造对象
SimpleDateFormat(String pattern) ;使用给定模式和默认语言环境的默认日期格式符号构造对象
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) ;使用给定的模式和日期格式符号构造对象
SimpleDateFormat(String pattern, Locale locale);使用给定模式和给定语言环境的默认日期格式符号构造对象
//pattern-用户自定义的日期时间模式
//formatSymbols-用户自定义的日期时间格式符号,如:y、M、d
//locale-用户自定义的语言环境

这里format()和parse()的调用和DateFormat类的调用方法相同

其中比较常用的成员方法:

(1)applyPattern(String pattern)可使用新的日期时间模式创建对象,或是用新的模式替换旧的模式

(2)toPattern()返回描述此日期格式的模式字符串。

更多详细方法可以参照https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

实例:

package codeFormat;
import java.text.*;
import java.util.*;
public class ceshi {
	public static void main(String[] args) throws Exception{
		Date date=new Date();
		SimpleDateFormat myfmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
		SimpleDateFormat myfmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
		SimpleDateFormat myfmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat myfmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E");
		SimpleDateFormat myfmt4=new SimpleDateFormat("一年中的第D天 一年中的第w个星期 一月中的第W个星期 在一天中的k时z时区");
		System.out.println(myfmt4.format(date));
		myfmt4.applyPattern("yy-MM-dd HH:mm");//替换
		System.out.println(myfmt4.format(date));
		System.out.println(date.toString());
		System.out.println(myfmt.format(date));
		System.out.println(myfmt1.format(date));
		System.out.println(myfmt2.format(date));
		System.out.println(myfmt3.format(date));
		String s="2019年01月29日 05时39分52秒";
		System.out.println(myfmt.parse(s));
		System.out.println(myfmt.toPattern());
		
		
	}

}
运行结果为:
一年中的第29天 一年中的第5个星期 一月中的第5个星期 在一天中的16时CST时区
19-01-29 16:16
Tue Jan 29 16:16:09 CST 2019
2019年01月29日 16时16分09秒
19/01/29 16:16
2019-01-29 16:16:09
2019年01月29日 16时16分09秒 周二
Tue Jan 29 05:39:52 CST 2019
yyyy年MM月dd日 HH时mm分ss秒

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值