在 Java 里面有很多特别方便的函数(尽管术语可能不这么说)可以供我们使用,让一些本来要写好长好多的代码的事情变得仅仅几行就解决了。
在 SimpleDateFormat 中,有以下特定的规则:
G 年代标志符 y 年 M 月 d 日 h 时(在上午或者下午 12小时制) H 时(在一天中 24小时制)
m 分 s 秒 S 毫秒 E 星期 D 一年中的第几天 z 时区 F 一月中第几个星期几 w 一年中第几个星期
W 一月中第几个星期 a 上午 / 下午标记符 k 时(在一天中的、24小时制) K 时(在上午或者下午、12小时制)
下面这题为例(SDUT 2246):
对于日期的常用格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,此次编程竞赛的启动日期“2010/11/20”就是符合这种格式的一个日期,
而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd /yyyy”,如将“2010/11/20”改成这种格式,对应的则是”11/20/2010”。对于时间的格式,则常有12小时制和24小时制
的表示方法,24小时制用0-24来表示一天中的24小时,而12小时制只采用1-12表示小时,再加上am/pm来表示上午或下午,比如”17:30:00”是采用24小时制来表示时间,而对应的
12小时制的表示方法是”05:30:00pm”。注意12:00:00pm表示中午12点,而12:00:00am 表示凌晨12点。
对于给定的采用”yyyy/mm/dd”加24小时制(用短横线”-”连接)来表示日期和时间的字符串,请编程实现将其转换成”mm/dd/yyyy”加12小时制格式的字符串。
import java.util.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
n = sc.nextInt();
sc.nextLine();
SimpleDateFormat df1 = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss",Locale.CHINA);
SimpleDateFormat df2 = new SimpleDateFormat("MM/dd/yyyy-hh:mm:ssa",Locale.US);
String s;
while(n -- > 0) {
s = sc.nextLine();
try {
System.out.println(df2.format(df1.parse(s)).toLowerCase());
}catch(ParseException e) {
e.printStackTrace();
}
}
}
}
其中需要知道的是,SimpleDateFormat 在 Java 里面要导入包 java.text.SimpleDateFormat 这样才可以用。 语句中: SimpleDateFormat df1 = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss",Locale.CHINA); 以CHINA时间为准,定义格式为24小时制的时间格式,可以是这样的形式:2018/11/27-17:12:12 ,同样的道理第二个格式定义语句有同样的功能,format 的作用就是转换成这个格式,而 parse (从语法上描述或分析(词句等))可以把字符串转换成相应的格式储存,类型是 Date,这就像是一个字符型 '0' 和整数型 0 是差不多的道理。