首先说下,我也是菜鸟,在使用java Date时,刚开始总有种有力使不上的的感觉,大多数时间我们使用Date其实就是在String和他之间转换来转换去的。为了能更好的使用这个东西,我很多时候会有这样的疑问:
String s="1995年的3月那个流着血的18日";
Date d=?;
我们该怎么样转化呢?正则?字符串解析?其实java提供了一个非常方便的让我们处理各种自定义日期格式的工具类
public abstract class DateFormat extends Format
同时他有一个实现子类:SimpleDateFormat
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
。
这是他初始化的一个方法,其中的pattern可以使用自定义的日期格式,配合这标准的日期参数使用,感觉非常灵活好用,具体如下,自己体会,参数附录在最后。
其中的核心两个常用转换方法是:
public final String format(Date date)
-
将一个 Date 格式化为日期/时间字符串。
-
-
参数:
-
date
- 要格式化为时间字符串的时间值。
返回:
- 已格式化的时间字符串。
-
public Date parse(String source) throws ParseException
-
从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。
有关日期解析的更多信息,请参阅
parse(String, ParsePosition)
方法。 -
-
参数:
-
source
- 一个String
,应从其开始处进行解析。
返回:
-
解析字符串得到的
Date
。
抛出:
-
ParseException
- 如果无法解析指定字符串的开始处。
-
具体用法如下:
package langtest;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String string="1995年的3月那个流着血的18日";
Date date=new Date();
DateFormat dateFormat=new SimpleDateFormat("yyyy年的M月那个流着血的dd日");
try {
date=dateFormat.parse(string);
System.out.println(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String string2=dateFormat.format(date);
System.out.println(string2);
}
}
另附上初始化SimpleDateFormat具体要用到的各个参数:
字母 | 日期或时间元素 | 表示 | 示例 |
---|---|---|---|
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 |
其中总容易被搞错的就是月份的M是大写的,而分钟数m则是小写的,参数上很多都蛮实用的,但是要注意大小写,