无论是对于java程序设计还是数据库操作,我们都避免不了需要针对时间进行操作,这就涉及到时间的格式和字符串如何与时间的不同格式进行互转。
一、时间和日期的模式:
字母 |
日期或时间元素 |
表示 |
示例 |
G |
Era 标志符 |
Text |
AD |
y |
年 |
Year |
1996; 96 |
M |
年中的月份 |
Month |
July; Jul; 07 |
w |
年中的周数 |
Number |
27 |
W |
月份中的周数 |
Number |
2 |
D |
年中的天数 |
Number |
189 |
d |
月份中的天数 |
Number |
10 |
F |
月份中的星期 |
Number |
2 |
E |
星期中的天数 |
Text |
Tuesday; Tue |
a |
Am/pm 标记 |
Text |
PM |
H |
一天中的小时数(0-23) |
Number |
0 |
k |
一天中的小时数(1-24) |
Number |
24 |
K |
am/pm 中的小时数(0-11) |
Number |
0 |
h |
am/pm 中的小时数(1-12) |
Number |
12 |
m |
小时中的分钟数 |
Number |
30 |
s |
分钟中的秒数 |
Number |
55 |
S |
毫秒数 |
Number |
978 |
z |
时区 |
General time zone |
Pacific Standard Time; PST; GMT-08:00 |
Z |
时区 |
RFC 822 time zone |
-0800 |
二、日期类型以及范围
(java中有Date和Timestamp类型,DateTime在SQL中)
Date(yyyy-MM-dd) 1000-01-01~9999-12-31
DateTime (yyyy-MM-dd hh:mm:ss) 1000-01-01~9999-12-31
Timestamp (yyyy-MM-dd hh:mm:ss) 1970-01-01~2037-12-31
三、日期和时间互转
1、日期转字符串
// 时间转字符串——方法一:date--String
public void stringToDate() {
Date date = new Date();// 获取当前时间
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");// 格式类,括号里直接填时间格式
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss");// 格式类,括号里直接填时间格式
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式类,括号里直接填时间格式
// 保存时间格式在字符串中便于输出显示
String str1 = sdf1.format(date);
String str2 = sdf2.format(date);
String str3 = sdf3.format(date);
// 输出测试
System.out.println(str1+"\n"+str2+"\n"+str3+"\n");
}
// 时间转字符串——方法二:long--Timestamp--date--String
public static void timeToString() {
// 获取当前系统的时间毫秒数,放入timestamp中
Timestamp tt = new Timestamp(System.currentTimeMillis());
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 规定时间格式
String str = df.format(tt);//按照格式转化为字符串
System.out.println(str);
}
2、字符串转时间
// 字符串转时间——方法一(异常方法)
public static void stringToDateErr() {
String str = "2018-09-27";// 自定义时间类型字符串
Timestamp tt = Timestamp.valueOf(str);// 转换格式
//这样直接输出会报一个非法转换异常:Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
System.out.println(tt);
}
// 字符串转时间——方法一(格式正确)
public static void stringToDate() {
String str = "2018-09-27 13:14:50";// 自定义时间类型字符串
Timestamp tt = Timestamp.valueOf(str);// 转换格式
System.out.println(tt);// 正常输出
}
// 字符串转时间——方法二(String--date—long-- timestamp)
public static void stringToTime() {
String str = "2018-09-27";// 自定义时间类型字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
date = df.parse(str);
long longtime = date.getTime();// 1970到现在的毫秒数
Timestamp tt = new Timestamp(longtime);// 转换为timestamp格式
System.out.println(tt);//正确输出
} catch (ParseException e) {
e.printStackTrace();
}
}