一、Date对象
毫秒是一个long类型的值,要精确嘛,浮点数不精确
在中国,Java会自动改为东8区 CST ;
补充:格林威治时间 GMT ;
// 获得date对象
Date date = new Date();
System.out.println(date);
// 得到毫秒值 1秒 = 1000 毫秒 = 1E9 纳秒
// 返回的是GMT 现在到 1970 1 1 00:00:00之间的毫秒值
long haomiao = date.getTime(); // Calendar是返回时间对象
System.out.println(date.getTime());
date.setTime(long time) 设置Date类的值。
// 将long型的整数转换成一个Date对象。
// long类型性对于格林威治时间点。
Date date2 = new Date(0L);
System.out.println(new Date(0L));
二、DateFormat类
java.text.DateFormat
是抽象类,作用日期(Date)与文本(String)之间的转换
用子类java.text.SimpleDateFormat实现,构造函数的参数为模式
常用的模式规则:
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatStudy {
public static void main(String[] args) throws ParseException {
Date date = new Date();
// format方法 Date ------> String
// 创建日期格式化对象,默认风格为 2018/11/9 下午4:56
DateFormat df0 = new SimpleDateFormat();
// 创建日期格式化对象,并制定格式化的风格
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = df.format(date);
System.out.println(str); // 2018-11-09 16:53:10
// parse方法 String ------> Date
// @@当前调用函数要写抛异常 ParseException
// 必须对其进行捕获或声明以便抛出
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str2 = "2018-12-11 12:12:12"; // 格式必须正确
Date date2 = df2.parse(str2);
System.out.println(date2);
}
}
总结:
- 创建方式:
DateFormat df = new SimpleDateFormat(String pattren)
- 转换成字符串:
df.format(Date对象) ---\> String
- 转换成Date:
df.parse(str)
,其中有两点注意事项- 必须在调用函数中显示抛出异常
throws ParseException
。 - 转换的字符串必须和日期格式化对象的格式一致。
- 必须在调用函数中显示抛出异常
三、Calendar类
由于Java是美国佬开发的,有些文化习惯有点差异,针对于Calendar类。
- 月份要 + 1; 倒着计算要减1
- 一周中的第几天:要 -1; 倒着要加1
Calendar为抽象类,由于语言敏感性,需要通过调用静态方法创建一个实例
Calendar类中提供了很多成员变量:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
// @@创建一个Calendar实例,默认当前系统时间。
Calendar cal = Calendar.getInstance();
// @@get方法用来获取指定字段的值;
int year = cal.get(Calendar.YEAR);
// 注意:月份要+1
int month = cal.get(Calendar.MONTH) + 1;
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
// @@set方法用来设置指定字段的值;
cal.set(Calendar.YEAR, 2020);
year = cal.get(Calendar.YEAR);
System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
// @@add方法,对指定日历字段的值进行加减操作,正数加,负数减
cal.add(Calendar.YEAR, 2);
cal.add(Calendar.DAY_OF_MONTH, -2);
year = cal.get(Calendar.YEAR);
dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
// @@getTime, 得到Date对象,不是等同于Date的getTime得到毫秒值
Date date = cal.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
// @@ setTime(Date date) 通过指定的Date对象设置Calendar
cal.setTime(new Date);
西方星期的开始为周日,中国为周一;Calendar类中,月份是以0-11代表1-12月;
日期是有大小关系的,时间靠后,时间越大。