日期格式化的常见方法以及两种常见方法的详细举例

//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);
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值