java基础--日期

来源:互联网 发布:网络电玩 编辑:程序博客网 时间:2024/04/30 07:17
java的日期和时间类一直很容易混淆,日期的转换和格式化都比较复杂,主要是一下几点:

Ⅰ、创建日期

Ⅱ、日期格式化显示

Ⅲ、日期的转换(主要是和字符串之间的相互转换)

Ⅳ、日期中年、月、日、时、分、秒、星期、月份等获取。

Ⅴ、日期的大小比较、日期的加减。

1、java.util.Date

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

方法:

 boolean after(Date when) 

          测试此日期是否在指定日期之后。 

 boolean before(Date when) 

          测试此日期是否在指定日期之前。

public static void date(){long sec = System.currentTimeMillis();System.out.println(sec);Date date = new Date(sec);//getYear返回当前年份-1900的值//getMonth返回当前月份-1的值//getDate返回一个月的第几天,getDay返回一周的第几天System.out.println(date.getYear()+"/"+date.getMonth()+"/"+date.getDate()+"   "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds());//无参构造函数默认创建当前时间对象date = new Date();System.out.println(date.getTime()-sec);}

 

2、java.util.Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。一个Calendar的实例是系统时间的抽象表示,从Calendar的实例可以知道年月日星期月份时区等信息。Calendar类中有一个静态方法get(int x),通过这个方法可以获取到相关实例的一些值(年月日星期月份等)信息。参数x是一个产量值,在Calendar中有定义。

方法:

abstract  void add(int field, int amount) 

          根据日历的规则,为给定的日历字段添加或减去指定的时间量。 

void clear() 

          将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 

 void clear(int field) 

          将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 

 boolean after(Object when) 

          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。 

 boolean before(Object when) 

          判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。 

int get(int field) 

          返回给定日历字段的值。 

static Calendar getInstance() 

          使用默认时区和语言环境获得一个日历。 此方法有多个重载函数。

 Date getTime() 

          返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 

void set(int field, int value) 

          将给定的日历字段设置为给定值。 此方法有多个重载函数。

void setTime(Date date) 

          使用给定的 Date 设置此 Calendar 的时间。 

public static void calendar(){Calendar cal = Calendar.getInstance();//根据不同地区返回不同值.默认星期天是第一天,星期六是一周最后一天System.out.println(cal.getFirstDayOfWeek() == Calendar.SUNDAY); //MONTH,DAY_OF_WEEK,AM,AM_PM这些有返回值,其他的返回null。并且System.out.println(cal.getDisplayName(Calendar.MONTH, Calendar.LONG,Locale.CHINA));//JDK1.7的新方法//返回指定年份的周数System.out.println(cal.getWeeksInWeekYear());//某一年的第一周的第一天,与weekyear的第一天相同//比如2012年12月30日是2013年的第一周的第一天(星期天),返回2013,但是2013年的第一天是1月1日,星期二System.out.println(cal.getWeekYear());//在给定的字段上增加或减去单位时间单元,但是不超过该字段的最大值//增加一个星期cal.roll(Calendar.WEEK_OF_MONTH, true);//在指定字段上加上或减去指定的时间量,这里是将日期加上7cal.add(Calendar.DATE, 7);//WEEK_OF_MONTH得到指定日期是这个月的第几周System.out.println(cal.get(Calendar.WEEK_OF_MONTH));//WEEK_OF_YEAR得到指定日期是这一年的第几周System.out.println(cal.get(Calendar.WEEK_OF_YEAR));//根据给定的字段设置成未定义:YEAR会变成1970,MONTH会变成0,但是清除DATE的值却不变??cal.clear(Calendar.DATE);System.out.println(cal.get(Calendar.DATE));//此方法却会将DATE的值置为1cal.clear();System.out.println(cal.get(Calendar.DATE));//给定此 Calendar 的时间值,getActualMaximum返回指定日历字段可能拥有的最大值.//getActualMinimum,返回指定日历字段可能拥有的最小值。System.out.println(cal.getActualMaximum(Calendar.DATE));}



3、java.util.GregorianCalendar

GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。

GregorianCalendar 是一种混合日历,在单一间断性的支持下同时支持儒略历和格里高利历系统,在默认情况下,它对应格里高利日历创立时的格里高利历日期(某些国家是在 1582 年 10 月 15 日创立,在其他国家要晚一些)。可由调用方通过调用 setGregorianChange() 来更改起始日期。

clear 方法将日历字段设置为未定义。GregorianCalendar 为每个日历字段使用以下默认值(如果该值未定义)。 

 

字段默认值ERAADYEAR1970MONTHJANUARYDAY_OF_MONTH1DAY_OF_WEEK一个星期的第一天WEEK_OF_MONTH0DAY_OFWEEK_IN_MONTH1AM_PMAMHOUTR,HOUR_OF_DAY,MINUTE,SECOND,MILLISECOND0

isLeapYear(int year)是否是闰年


 4、java.text.DateFormat

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。 

DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。 

DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。 

要格式化一个当前语言环境下的日期,可使用某个静态工厂方法: 

  myString = DateFormat.getDateInstance().format(myDate);

 要格式化不同语言环境的日期,可在 getDateInstance() 的调用中指定它。 

  DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);

 还可使用 DateFormat 进行解析。 

  myDate = df.parse(myString);

方法:

String format(Date date) 

          将一个 Date 格式化为日期/时间字符串。 

Calendar getCalendar() 

          获取与此日期/时间格式器关联的日历。 

static DateFormat getDateInstance() 

          获取日期格式器,该格式器具有默认语言环境的默认格式化风格。 

static DateFormat getDateTimeInstance() 

          获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。 

static DateFormat getTimeInstance() 

          获取时间格式器,该格式器具有默认语言环境的默认格式化风格。 

public static void dateFormat() throws ParseException{//DateFormat类的构造函数有protected修饰,只能子类调用。//获取为日期和时间使用 SHORT 风格的默认日期/时间格式器。DateFormat df = DateFormat.getInstance();//获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。df = df.getDateInstance();//将指定字符串转换成Date对象,如果指定格式不正确会抛出ParseException异常。Date d = df.parse("1990-10-20");//将日期格式化为字符串System.out.println(df.format(new Date()));}



​5、java.text.SimpleDateFormat

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

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

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

字母日期或时间元素表示示例GEra 标志符TextADy年Year1996; 96M年中的月份MonthJuly; Jul; 07w年中的周数Number27W月份中的周数Number2D年中的天数Number189d月份中的天数Number10F月份中的星期Number2E星期中的天数TextTuesday; TueaAm/pm 标记TextPMH一天中的小时数(0-23)Number0k一天中的小时数(1-24)Number24Kam/pm 中的小时数(0-11)Number0ham/pm 中的小时数(1-12)Number12m小时中的分钟数Number30s分钟中的秒数Number55S毫秒数Number978z时区General time zonePacific Standard Time; PST; GMT-08:00Z时区RFC 822 time zone-0800

方法:

Date parse(String text, ParsePosition pos) 

          解析字符串的文本,生成 Date。 


public static void simpleDateFormat() throws ParseException{//用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss:SSS");//将按照指定格式的字符串转换成Date对象Date date = sdf.parse("2013-12-23 22:23:41:234");//将Date对象格式化成指定格式的字符串System.out.println(sdf.format(new Date(2013,11,23)));}
==================================================================

以上这些表示日期的类Date,Calendar,GregranCalendar中,Date的大部分方法已过时,推荐使用Calendar。

但是Calendar的getTime方法返回Date对象

GregorianCalendar的getGregorianCalendar方法返回Date对象,却没有将Date对象转换成Calendar和GregorianCalendar的方法。

原创粉丝点击