//java SE 5.0 新特性 静态导入
import static java.util.Calendar.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* 本例列举出了处理日期的常见方法
* 并对两种常见方法进行详细的举例
* @author Administrator
*
*/
public class FormatDateTest {
public static void main(String[] args) {
/* testDate();
useString();
useFormat();
userDateFormat();
userSimpleDateFormat();*/
//字符串格式化日期的所有实例
testStringFormatDate();
//使用SimpleDateFormat方式格式化
testSimpleDateFormat();
}
public static void testSimpleDateFormat() {
System.out.println(getResult("yyyy.MM.dd G 'at' HH:mm:ss z",Locale.US));
System.out.println(getResult("yyyy.MM.dd G 'at' HH:mm:ss z",Locale.CHINA));
System.out.println(getResult("EEE, MMM d, ''yy",Locale.US));
System.out.println(getResult("h:mm a",Locale.US));
System.out.println(getResult("hh 'o''clock' a, zzzz",Locale.US));
System.out.println(getResult("K:mm a, z" ,Locale.US));
System.out.println(getResult("yyyyy.MMMMM.dd GGG hh:mm aaa",Locale.US));
System.out.println(getResult("EEE, d MMM yyyy HH:mm:ss Z",Locale.US));
System.out.println(getResult("yyMMddHHmmssZ",Locale.US));
System.out.println(getResult("yyyy-MM-dd'T'HH:mm:ss.SSSZ",Locale.US));
System.out.println(getResult("yyyy年MM月dd日 HH:mm:ss a", Locale.CHINA));
/*
字母 日期或时间元素 表示 示例
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 */
}
private static String getResult(String string,Locale local) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(string,local);
return simpleDateFormat.format(new Date());
}
/**
* 字符串格式化中的"$"代表的意思:给定被格式化的参数索引
* System.out.println(String.format("%1$d %2$x",10,16));//d 代表十进制,x代表16进制
* System.out.println(String.format("%1$d %1$x",16));
*/
public static void testStringFormatDate() {
System.out.println(String.format("完整的日期:\t%1$tc \r\nISO8601日期:\t%1$tF \r\n美国格式的日期(月/日/年)\t %1$tD",new Date()));
System.out.println(String.format("24小时时间:\t%1$tT \r\n12小时时间:\t%1$tr \r\n24小时时间没有秒\t %1$tR",new Date()));
System.out.println(String.format(Locale.US,"12小时时间:\t%1$tr",new Date()));
System.out.println(String.format("4位数字的年(补零):\t%1$tY \r\n年的后两位数字:\t%1$ty \r\n年的前两位数字\t %1$tC",new Date()));
//中国格式
System.out.println(String.format("月的完整拼写:\t%1$tB \r\n月的缩写(b或h):\t%1$tb \r\n月的缩写(b或h)\t %1$th",new Date()));
System.out.println(String.format(Locale.US,"月的完整拼写:\t%1$tB \r\n月的缩写(b或h):\t%1$tb \r\n月的缩写(b或h)\t %1$th",new Date()));
System.out.println(String.format("两位数字的月(补0):\t%1$tm \r\n两位数字的日(补零):\t%1$td \r\n两位数字的日(不补0)\t %1$te",new Date()));
/*以下转换字符用来格式化时间: 'H' 24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23。
'I' 12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12。
'k' 24 小时制的小时,即 0 - 23。
'l' 12 小时制的小时,即 1 - 12。
'M' 小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59。
'S' 分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60 ("60" 是支持闰秒所需的一个特殊值)。
'L' 秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999。
'N' 秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。
'p' 特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。
'z' 相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800。
'Z' 表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。
's' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。
'Q' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。
以下转换字符用来格式化日期: 'B' 特定于语言环境的月份全称,例如 "January" 和 "February"。
'b' 特定于语言环境的月份简称,例如 "Jan" 和 "Feb"。
'h' 与 'b' 相同。
'A' 特定于语言环境的星期几全称,例如 "Sunday" 和 "Monday"
'a' 特定于语言环境的星期几简称,例如 "Sun" 和 "Mon"
'C' 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99
'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE。
'y' 年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99。
'j' 一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366。
'm' 月份,被格式化为必要时带前导零的两位数,即 01 - 13。
'd' 一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31
'e' 一个月中的天数,被格式化为两位数,即 1 - 31。
以下转换字符用于格式化常见的日期/时间组合。 'R' 24 小时制的时间,被格式化为 "%tH:%tM"
'T' 24 小时制的时间,被格式化为 "%tH:%tM:%tS"。
'r' 12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。
'D' 日期,被格式化为 "%tm/%td/%ty"。
'F' ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"。
'c' 日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。
任何未明确定义为转换的字符都是非法字符,并且都被保留,以供将来扩展使用。*/
}
public static void testDate() {
System.out.println(String.format("%1$d %2$x", 10,16));
//这里使用了静态导入
Calendar c = new GregorianCalendar(1995,MAY, 23);
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
System.out.println(s);
String date = DateFormat.getDateInstance().format(new Date());
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(new Date()));
System.out.println(DateFormat.getDateInstance(DateFormat.MONTH_FIELD, Locale.US).format(new Date()));
}
/**
* 利用字符串的格式化
*/
public static void useString(){
Date date = new Date();
String dateString = String.format("%tF", date);
System.out.println(dateString);
}
/**
* 利用Formatter类
*/
public static void useFormat(){
Date date = new Date();
Formatter formatter = new Formatter();
System.out.println(formatter.format("%tF", date));
}
/**
* 利用DateFormat类,(功能较少)
*/
public static void userDateFormat(){
Date date = new Date();
String dateString = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA).format(date);
System.out.println(dateString);
}
/**
* DateFormater的子类
*/
public static void userSimpleDateFormat(){
Date date = new Date();
String dateString = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(dateString);
}
}
import static java.util.Calendar.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
* 本例列举出了处理日期的常见方法
* 并对两种常见方法进行详细的举例
* @author Administrator
*
*/
public class FormatDateTest {
public static void main(String[] args) {
/* testDate();
useString();
useFormat();
userDateFormat();
userSimpleDateFormat();*/
//字符串格式化日期的所有实例
testStringFormatDate();
//使用SimpleDateFormat方式格式化
testSimpleDateFormat();
}
public static void testSimpleDateFormat() {
System.out.println(getResult("yyyy.MM.dd G 'at' HH:mm:ss z",Locale.US));
System.out.println(getResult("yyyy.MM.dd G 'at' HH:mm:ss z",Locale.CHINA));
System.out.println(getResult("EEE, MMM d, ''yy",Locale.US));
System.out.println(getResult("h:mm a",Locale.US));
System.out.println(getResult("hh 'o''clock' a, zzzz",Locale.US));
System.out.println(getResult("K:mm a, z" ,Locale.US));
System.out.println(getResult("yyyyy.MMMMM.dd GGG hh:mm aaa",Locale.US));
System.out.println(getResult("EEE, d MMM yyyy HH:mm:ss Z",Locale.US));
System.out.println(getResult("yyMMddHHmmssZ",Locale.US));
System.out.println(getResult("yyyy-MM-dd'T'HH:mm:ss.SSSZ",Locale.US));
System.out.println(getResult("yyyy年MM月dd日 HH:mm:ss a", Locale.CHINA));
/*
字母 日期或时间元素 表示 示例
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 */
}
private static String getResult(String string,Locale local) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(string,local);
return simpleDateFormat.format(new Date());
}
/**
* 字符串格式化中的"$"代表的意思:给定被格式化的参数索引
* System.out.println(String.format("%1$d %2$x",10,16));//d 代表十进制,x代表16进制
* System.out.println(String.format("%1$d %1$x",16));
*/
public static void testStringFormatDate() {
System.out.println(String.format("完整的日期:\t%1$tc \r\nISO8601日期:\t%1$tF \r\n美国格式的日期(月/日/年)\t %1$tD",new Date()));
System.out.println(String.format("24小时时间:\t%1$tT \r\n12小时时间:\t%1$tr \r\n24小时时间没有秒\t %1$tR",new Date()));
System.out.println(String.format(Locale.US,"12小时时间:\t%1$tr",new Date()));
System.out.println(String.format("4位数字的年(补零):\t%1$tY \r\n年的后两位数字:\t%1$ty \r\n年的前两位数字\t %1$tC",new Date()));
//中国格式
System.out.println(String.format("月的完整拼写:\t%1$tB \r\n月的缩写(b或h):\t%1$tb \r\n月的缩写(b或h)\t %1$th",new Date()));
System.out.println(String.format(Locale.US,"月的完整拼写:\t%1$tB \r\n月的缩写(b或h):\t%1$tb \r\n月的缩写(b或h)\t %1$th",new Date()));
System.out.println(String.format("两位数字的月(补0):\t%1$tm \r\n两位数字的日(补零):\t%1$td \r\n两位数字的日(不补0)\t %1$te",new Date()));
/*以下转换字符用来格式化时间: 'H' 24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23。
'I' 12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12。
'k' 24 小时制的小时,即 0 - 23。
'l' 12 小时制的小时,即 1 - 12。
'M' 小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59。
'S' 分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60 ("60" 是支持闰秒所需的一个特殊值)。
'L' 秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999。
'N' 秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。
'p' 特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。
'z' 相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800。
'Z' 表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。
's' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。
'Q' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。
以下转换字符用来格式化日期: 'B' 特定于语言环境的月份全称,例如 "January" 和 "February"。
'b' 特定于语言环境的月份简称,例如 "Jan" 和 "Feb"。
'h' 与 'b' 相同。
'A' 特定于语言环境的星期几全称,例如 "Sunday" 和 "Monday"
'a' 特定于语言环境的星期几简称,例如 "Sun" 和 "Mon"
'C' 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99
'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE。
'y' 年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99。
'j' 一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366。
'm' 月份,被格式化为必要时带前导零的两位数,即 01 - 13。
'd' 一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31
'e' 一个月中的天数,被格式化为两位数,即 1 - 31。
以下转换字符用于格式化常见的日期/时间组合。 'R' 24 小时制的时间,被格式化为 "%tH:%tM"
'T' 24 小时制的时间,被格式化为 "%tH:%tM:%tS"。
'r' 12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。
'D' 日期,被格式化为 "%tm/%td/%ty"。
'F' ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"。
'c' 日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。
任何未明确定义为转换的字符都是非法字符,并且都被保留,以供将来扩展使用。*/
}
public static void testDate() {
System.out.println(String.format("%1$d %2$x", 10,16));
//这里使用了静态导入
Calendar c = new GregorianCalendar(1995,MAY, 23);
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
System.out.println(s);
String date = DateFormat.getDateInstance().format(new Date());
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(new Date()));
System.out.println(DateFormat.getDateInstance(DateFormat.MONTH_FIELD, Locale.US).format(new Date()));
}
/**
* 利用字符串的格式化
*/
public static void useString(){
Date date = new Date();
String dateString = String.format("%tF", date);
System.out.println(dateString);
}
/**
* 利用Formatter类
*/
public static void useFormat(){
Date date = new Date();
Formatter formatter = new Formatter();
System.out.println(formatter.format("%tF", date));
}
/**
* 利用DateFormat类,(功能较少)
*/
public static void userDateFormat(){
Date date = new Date();
String dateString = DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA).format(date);
System.out.println(dateString);
}
/**
* DateFormater的子类
*/
public static void userSimpleDateFormat(){
Date date = new Date();
String dateString = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(dateString);
}
}