java.util(Date和Calendar)
Posted myseries
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.util(Date和Calendar)相关的知识,希望对你有一定的参考价值。
public class Date implements java.io.Serializable, Cloneable, Comparable<Date> { public Date() { //当前时间 this(System.currentTimeMillis()); } public Date(long date) { //分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 fastTime = date; } @Deprecated public Date(int year, int month, int date) { this(year, month, date, 0, 0, 0); } @Deprecated public Date(int year, int month, int date, int hrs, int min) { this(year, month, date, hrs, min, 0); } ........................ public String toString() { // "EEE MMM dd HH:mm:ss zzz yyyy"; BaseCalendar.Date date = normalize(); StringBuilder sb = new StringBuilder(28); int index = date.getDayOfWeek(); if (index == gcal.SUNDAY) { index = 8; } convertToAbbr(sb, wtb[index]).append(‘ ‘); // EEE convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(‘ ‘); // MMM CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(‘ ‘); // dd CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(‘:‘); // HH CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(‘:‘); // mm CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(‘ ‘); // ss TimeZone zi = date.getZone(); if (zi != null) { sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz } else { sb.append("GMT"); } sb.append(‘ ‘).append(date.getYear()); // yyyy return sb.toString(); } }
Date 表示距离1970-01-01 00:00:00的毫秒数,值与时区无关。大部分Date的方法都过时了,由Calendar类的方法替代
public class DateTest { @SuppressWarnings("deprecation") public static void main(String[] args) { Date d = new Date(); System.out.println(d); System.out.println(System.currentTimeMillis()); long l = Date.parse("Sun Sep 10 03:16:48 CST 2017"); System.out.println(l); Date data = new Date(l); System.out.println(data); Date day1=new Date(11,3,4); System.out.println(day1); } } 输出: Sun Sep 10 03:17:22 CST 2017 1504984642047 1505035008000 Sun Sep 10 17:16:48 CST 2017 Tue Apr 04 00:00:00 CST 1911
Calendar
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> { protected Calendar() { this(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); sharedZone = true; } protected Calendar(TimeZone zone, Locale aLocale) { fields = new int[FIELD_COUNT]; isSet = new boolean[FIELD_COUNT]; stamp = new int[FIELD_COUNT]; this.zone = zone; setWeekCountData(aLocale); } public static Calendar getInstance() { Calendar cal = createCalendar( TimeZone.getDefaultRef(),Locale.getDefault(Locale.Category.FORMAT)); cal.sharedZone = true; return cal; } public static Calendar getInstance(TimeZone zone) { return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT)); } public final Date getTime() { return new Date(getTimeInMillis()); } public final void setTime(Date date) { setTimeInMillis(date.getTime()); } public long getTimeInMillis() { if (!isTimeSet) { updateTime(); } return time; } ........
Calendar类是一个抽象类,Calendar类的静态方法getInstance()可以初始化一个日历对象:Calendar now = Calendar.getInstance();
可以使用下面三个方法把日历定到任何一个时间:
set(int year ,int month,int date)
set(int year ,int month,int date,int hour,int minute)
set(int year ,int month,int date,int hour,int minute,int second)
如果想获得年份、月份、小时等信息可以使用:
Now.get(Calendar.Month);这样的方法 0表示一月,1表示二月
get(Calendar.DAY_OF_MONTH)获得这个月的第几天
get(Calendar.DAY_OF_WEEK)获得这个星期的第几天
get(Calendar.DAY_OF_YEAR)获得这个年的第几天
getTimeMillis()获得当前时间的毫秒表示
Calendar和Date的转化
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
格式化输出日期时间:
Date data = new Date();
//SimpleDateFormat类用来对日期字符串进行解析和格式化输出
SimpleDateFormat f2=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
SimpleDateFormat f3=new SimpleDateFormat("yy/MM/dd HH:mm");
SimpleDateFormat f4=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()
SimpleDateFormat f5=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
System.out.println(f2.format(d));
System.out.println(f3.format(d));
System.out.println(f4.format(d));
System.out.println(f5.format(d));
关于Calendar 的实现类:GregorianCalendar
Java
中只携带了格里历(公历、阳历)的实现,那就是java.util.GregorianCalendar
类
Calendar calendar =
new
GregorianCalendar();
Calendar
类有着对应的get
方法,让你获取到年、月、日、小时、分钟、秒、毫秒和给定日期的时区
Calendar
类有着对应的set
方法,因此你也可以对这些字段进行设置
以上是关于java.util(Date和Calendar)的主要内容,如果未能解决你的问题,请参考以下文章
最佳实践:如何通过 JDBC 检查 SQL.DATE 中的特定 java.util.Calendar/Date?
为啥我不应该使用 date4j 而不是 joda java.util.Calendar 或 jsr 310?
常用类一一时间处理相关类一一java.util.Tomezone(java.util.Calendar , java.util.Date , java.text.DateFormat)