无论是对于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();
}
}