1.SimpleDateFormat
public class SimpleDateFormat extends DateFormat
SimpleDateFormat
是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。
SimpleDateFormat
允许以为日期-时间格式化选择任何用户指定的方式启动。 但是,希望用 DateFormat
中的getTimeInstance
、getDateInstance
或getDateTimeInstance
创建一个日期-时间格式化程序。 每个类方法返回一个以缺省格式化方式初始化的日期/时间格式化程序。 可以根据需要用applyPattern
方法修改格式化方式。
SimpleDateFormat类的继承关系:
java.lang.Object
|
+----java.text.Format
|
+----java.text.DateFormat
|
+----java.text.SimpleDateFormat
下面是个小例子:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
*/
public class simpleDateFormat {
public static void main(String[] args) {
//利用构造函数设置格式化模板
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");//等价于now.toLocaleString()
SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
SimpleDateFormat myFmt4=new SimpleDateFormat(
"一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
//Date 表示距离1970-01-01 00:00:00的毫秒数,值与时区无关。
Date now = new Date();
//执行格式化功能
System.out.println(myFmt.format(now));
System.out.println(myFmt1.format(now));
System.out.println(myFmt2.format(now));
System.out.println(myFmt3.format(now));
System.out.println(myFmt4.format(now));
//applyPattern方法设置格式化模板
myFmt.applyPattern("yyyy-MM-dd");
System.out.println(myFmt.format(now));
//parse()方法用于将输入的特定字符串转换成Date类的对象
Date date = null;
String s = "2017-12-29 上午12:03";
try {
date = myFmt.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//toString时用本地时区输出,如Thu Jun 30 17:12:57 CST 2016,CST表示China Standard Time。
System.out.println("date对象为" + date);//也可以直接利用toString方法输出
System.out.println("date对象为" + date.toString());
}
}
效果:
2017年12月29日 11时11分53秒
17/12/29 11:11
2017-12-29 11:11:53
2017年12月29日 11时11分53秒 星期五
一年中的第 363 天 一年中第52个星期 一月中第5个星期 在一天中11时 CST时区
2017-12-29
date对象为Fri Dec 29 00:00:00 CST 2017
date对象为Fri Dec 29 00:00:00 CST 2017
下面是一个格式化时间的工具类:
public class FormatDateTime {
public static String toLongDateString(Date dt){
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
return myFmt.format(dt);
}
public static String toShortDateString(Date dt){
SimpleDateFormat myFmt=new SimpleDateFormat("yy年MM月dd日 HH时mm分");
return myFmt.format(dt);
}
public static String toLongTimeString(Date dt){
SimpleDateFormat myFmt=new SimpleDateFormat("HH mm ss SSSS");
return myFmt.format(dt);
}
public static String toShortTimeString(Date dt){
SimpleDateFormat myFmt=new SimpleDateFormat("yy/MM/dd HH:mm");
return myFmt.format(dt);
}
public static void main(String[] args) {
Date now=new Date();
System.out.println(FormatDateTime.toLongDateString(now));
System.out.println(FormatDateTime.toShortDateString(now));
System.out.println(FormatDateTime.toLongTimeString(now));
System.out.println(FormatDateTime.toShortTimeString(now));
}
}
调用的结果如下:
2017年12月29日 10时46分09秒 星期五
17年12月29日 10时46分
10 46 09 0673
17/12/29 10:46
2.Date
Date类的继承关系:
java.lang.Object
|
+----java.util.Date
应用举例:
import java.util.Date;
public class dateTest {
public static void main(String[] args){
//第一种构造函数.无参构造创建的对象可以获取本机的当前日期和时间
Date date1=new Date();
//Date默认的时间表示顺序是:星期几、月、日、小时、分、秒、年。见下面的输出:
System.out.println(date1);
System.out.println(date1.toString());
//第二种构造函数。public Date(long date);
//首先,计算机将自身时间的“公元”设置为1970年1月1日00:00:00 GMT(格林威治时间)。
//其次,根据参数date,正值表示公元后的时间,负值表示公元前的时间;
//然后,创建一个 Date对象date2,并将其初始化为"公元"后的指定毫秒数1000。
//最后,运行该java程序的计算机是在北京时区,date2表示的时间为:1970年1月1日08:00:01
Date date2=new Date(1000);
System.out.println(date2);
//public long getTime();
//返回相对于1970年1月1日00:00:00 GMT而言,此 Date对象表示的毫秒数。
//运行该java程序的计算机是在北京时区,date2.getTime()表示相对于1970年1月1日08:00:00经过的毫秒数。
System.out.println(date2.getTime());
//System类的静态方法public long currentTimeMillis()获取系统当前时间。
//运行该java程序的计算机是在北京时区,这个值是从1970年1月1日08:00:00到目前时刻走过的毫秒数。
System.out.println(new Date().getTime());
System.out.println(System.currentTimeMillis());
//public void setTime(long time);
//将Date对象设置为相对于1970年1月1日00:00:00 GMT后的time毫秒的时间点。 不再举例
}
}
执行结果:
Fri Dec 29 14:04:59 CST 2017
Fri Dec 29 14:04:59 CST 2017
Thu Jan 01 08:00:01 CST 1970
1000
1514527499432
1514527499432
3.Calendar
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
Calendar类的继承关系:
|
+----java.util.Calendar
同样,Calendar类也在java.util包中。单词Calendar中文翻译为日历,实际上,在历史上有着许多种计时的方法。所以为了计时的统一,必需制定一个日历的标准。那现在最为普及和通用的日历标准就是"Gregorian Calendar"。也就是我们在讲述年份时常用"公元**年"。Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。使用Calendar类的static方法getInstance(),就可以初始化一个日历对象(获得一个"GreogrianCalendar"对象实例)。
Calendar对象可以调用以下三个set方法,将日历翻到任何一个时刻,当参数year取负值时表示公元前。
void set(int year, int month, int date) ;
void set(int year, int month, int date, int hourOfDay, int minute) ;
void set(int year, int month, int date, int hourOfDay, int minute, int second) ;
Calendar对象可以调用public int get(int field)方法获取年份、月份、小时、星期等信息。其中参数field的有效值由Calendar的静态常量指定。
应用举例:
import java.util.Calendar;
import java.util.Date;
class CalendarTest{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
//比当前月份少1
int month = cal.get(Calendar.MONTH);
//date表示日期,day表示天数,所以date与day_of_month相同
int date = cal.get(Calendar.DATE);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
//表示本周的第几天,从周日开始计算
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
//12小时制
int hour = cal.get(Calendar.HOUR);
//24小时制
int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int millisecond = cal.get(Calendar.MILLISECOND);
int maxDate = cal.getActualMaximum(Calendar.DATE);
System.out.println("现在的年份为:" + year);
System.out.println("现在的月份为:" + month);
System.out.println("现在的号为:" + date);
System.out.println("现在的号为:" + dayOfMonth);
System.out.println("现在是星期:" + (dayOfWeek-1));
System.out.println("现在过了的天数为:" + dayOfYear);
System.out.println("现在几点:" + hour);
System.out.println("现在几点:" + hourOfDay);
System.out.println("现在几分:" + minute);
System.out.println("现在几秒:" + second);
System.out.println("现在几毫秒:" + millisecond);
System.out.println("本月最后一天是:" + maxDate);
}
}
输出结果为:
现在的年份为:2017
现在的月份为:11
现在的号为:29
现在的号为:29
现在是星期:5
现在过了的天数为:363
现在几点:2
现在几点:14
现在几分:36
现在几秒:29
现在几毫秒:450
本月最后一天是:31
4.Date和Calendar之间转换
代码如下:
import java.util.Calendar;
import java.util.Date;
public class DateToCalendar {
public static void main(String[] args) {
//Calendar → Date 的转换
Calendar calendar = Calendar.getInstance();
// 从一个Calendar对象中获取Date对象
Date now = calendar.getTime();
System.out.println(now);
// Date → Calendar 的转换
// Calendar/GregorianCalendar都没有构造函数可以接受Date对象
//所以我们必需先获得一个Calendar实例,然后设置Date对象
Calendar cal = Calendar.getInstance();
cal.setTime(now);
}
}
5.代码的执行时间
public String exportData(){
Date date = new Date();
//核心业务代码
String msg = "一大批需要执行的业务代码";
Date endDate = new Date();
long diff = endDate.getTime() - date.getTime();
//此处最好使用日志相关的方法,入logger.info();
System.out.println("导出商品档案条,耗时"+diff+"毫秒");
return msg;
}