DateFormat、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 



测试代码  

package com.undergrowth.text;

import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.junit.Test;

/**
 * Format-->用于处理语言环境敏感的信息
 * 		format-->对象转为字符串
 * 		parseObject-->字符串转为对象
 * 	DateFormat-->处理日期、时间格式化
 * 		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  
--------------------------------------	
 * @author Administrator
 *
 */
public class DateFormatLearn {
	//日期格式
	DateFormat dateFormat;
	//日历
	Calendar calendar;
	//日期
	Date nowDate=new Date(System.currentTimeMillis());
	//日期格式化具体类
	SimpleDateFormat simpleDateFormat=new SimpleDateFormat();
	//时间字符串
	String nowTimeString,pattern;
	//解析位置
	ParsePosition parsePosition=new ParsePosition(0);
	//字段位置 跟踪字符串
	FieldPosition fieldPosition=new FieldPosition(DateFormat.MONTH_FIELD);
	
	/**
	 * 测试DateFormat的静态方法 getAvailableLocales
	 */
	@Test
	public void testDateFormatAvailableLocales(){
		Locale[] locales=DateFormat.getAvailableLocales();
		availLocale(locales);
	}
	
	/**
	 * 遍历可得到的语言环境
	 * @param locales
	 */
	private void availLocale(Locale[] locales) {
		for (Locale locale : locales) {
			System.out.println(locale.getCountry() + "\t"
					+ locale.getDisplayCountry() + "\t"
					+ locale.getDisplayName() + "\t" + locale.getLanguage()
					+ "\t" + locale.getDisplayLanguage());
		}
	}
	
	/**
	 * 测试获取DateFormat的获取
	 */
	@Test
	public void testDateFormat(){
		//获取日期格式化
		dateFormat=DateFormat.getDateInstance();
		//获取到与日期格式化相关的日期
		calendar=dateFormat.getCalendar();
		//按照默认格式格式化日期
		defaultFormatDate();
	}

	/**
	 * 按照默认格式格式化日期
	 */
	private void defaultFormatDate() {
		// TODO Auto-generated method stub
		 nowTimeString=dateFormat.format(nowDate);
		System.out.println(nowTimeString);
		System.out.println(System.currentTimeMillis());
		System.out.println(calendar.getTimeInMillis());
	}
	
	/**
	 * SimpleDateFormat-->解析日期格式的实现类
	 */
	@Test
	public void testSimpleDateFormat(){
		//默认格式
		formatSimpleDateFormat();
		//修改日期格式化模式
		List<String> patternsList=createListPattern();
		//迭代日期格式
		for (String pattern : patternsList) {
			simpleDateFormat.applyPattern(pattern);
			formatSimpleDateFormat();
		}
	}

	/**
	 * 创建一系列的模式
	 * @return
	 */
	private List<String> createListPattern() {
		// TODO Auto-generated method stub
		List<String> patternsList=new ArrayList<String>();
		patternsList.add("		yyyy-MM-dd	HH:mm:ss.S	z");
		patternsList.add("G		yyyy-MM-dd	a HH:mm:ss.S	z");
		patternsList.add("G		yyyy-MM-dd	kk:mm:ss.S	z");
		patternsList.add("		yyyy-MM-dd	a hh:mm:ss.S	z");
		patternsList.add("G		yyyy-MM-dd	KK:mm:ss.S	z");
		patternsList.add("		 一年中的第DD天	HH:mm:ss.S	Z");
		patternsList.add("G 	一年中的第DD天	HH:mm:ss.S	Z");
		patternsList.add("G 	月份中的星期数:FF	HH:mm:ss.S	Z");
		patternsList.add("G 	星期中的天数:EE	HH:mm:ss.S	Z");
		return patternsList;
	}

	/**
	 * 测试不同的模式
	 */
	private void formatSimpleDateFormat() {
		nowTimeString=simpleDateFormat.format(nowDate);
		System.out.println(simpleDateFormat.toPattern());
		System.out.println(nowTimeString);
	}
	
	/**
	 * 解析字符串为对象
	 */
	@Test
	public void testPrase(){
		try {
			Map<String, String> datePattern=createPatternsMap();
			//迭代不同的模式 将其转换为日期
			for (Map.Entry<String, String> dateEntry : datePattern.entrySet()) {
				//获取字符串和日期模式
				System.out.println(dateEntry.getKey()+"---对应模式---"+dateEntry.getValue());
				simpleDateFormat.applyPattern(dateEntry.getValue());
				System.out.println(simpleDateFormat.parse(dateEntry.getKey()));
			}
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 创建不同的日期和时间模式
	 * @return
	 */
	private Map<String, String> createPatternsMap() {
		// TODO Auto-generated method stub
		Map<String, String> datePattern=new HashMap<String, String>();
		List<String> patternsList=createListPattern();
		//迭代日期格式
		for (String pattern : patternsList) {
			simpleDateFormat.applyPattern(pattern);
			nowTimeString=simpleDateFormat.format(nowDate);
			//将不同的日期和模式存储在Map中
			datePattern.put(nowTimeString, pattern);
		}
		return datePattern;
	}
	
	/**
	 * 测试解析位置
	 */
	@Test
	public void testPrasePosition(){
		nowTimeString=simpleDateFormat.format(nowDate);
		System.out.println("带解析的字符串-->"+nowTimeString);
		System.out.println("日期格式化模式-->"+simpleDateFormat.toPattern());
		System.out.println("开始的位置-->"+parsePosition.getIndex());
		System.out.println("解析的日期-->"+simpleDateFormat.parse(nowTimeString,parsePosition));
		System.out.println("解析完的位置-->"+parsePosition.getIndex());
		System.out.println("解析的日期-->"+simpleDateFormat.parse(nowTimeString,parsePosition));
	}
	
	/**
	 * 测试日期常量
	 */
	@Test
	public void testConstants(){
		//用于表示月份常量
		System.out.println(DateFormat.MONTH_FIELD);
		simpleDateFormat.applyPattern("yyyy-MM-dd	HH:mm:ss.S	z");
		StringBuffer toAppendTo=new StringBuffer();
		//转换日期 跟踪日期字符串
		nowTimeString=simpleDateFormat.format(nowDate,toAppendTo,fieldPosition).toString();
		System.out.println(nowTimeString);
		System.out.println(toAppendTo.toString());
		//获取字符串的起始位置
		System.out.println(fieldPosition.getBeginIndex()+"\t"+fieldPosition.getEndIndex());
	}
	
	
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值