按照要求的输入输出格式进行日期字符串的转化

编程题:

        先编写一个方法,它将格式为“yyyy/mm/dd”形式的日期字符串转化为日期对象。若日期字符串不符合以上规定,则抛出异常。再在main方法中对正常和异常输入的日期字符串分别进行验证,并输出转换后的日期对象。

1 转化类

/**
 * 
 */
package PrintDate;
import java.util.Scanner;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
 * @author HuangRong
 * (1)使用SimpleDateFormat实现日期的格式化
 * (2)对输入的字符串进行格式检测,对输入的年,月,日数字字符的检测
 * (3)若不符合上述检测,则抛出相应的异常,否则按照指定格式输出日期
 */
public class StrToDate {
	//存放字符串的数组
	private char []arrays;
	String str;
	public void Convert(){
		Scanner input=new Scanner(System.in);
		System.out.println("--------------------------------------------------------");
		System.out.println("-若您输入的字符串不是十位,则不能加载类                 ");
		System.out.println("-若非xxxx/xx/xx格式,则抛出格式异常                     ");
		System.out.println("-若您输入的‘x’非数字字符,则抛出数字异常              ");

		System.out.println("请选择您需要的日期  1 输出系统时间  2 从键盘输入时间(格式必须为xxxx/xx/xx格式):");
		int xuanze=input.nextInt();
		if(xuanze==1){
			printSystemTime();
		}else if(xuanze==2){

			System.out.println("-请输入日期字符串(格式为xxxx/xx/xx):                    ");
			str=input.next();
			arrays=str.toCharArray();
			try{
				//检查数组中第4和第7个字符为‘/’
				setForm(str);
				//检查数组中第0、1、2、3、5、6、8、9个字符为数字字符
				setNumber(str);
				System.out.println("-请选择输出格式 1 为xxxx/xx/xx格式  2 为xxxx-xx-xx格式: ");
				int geshi=input.nextInt();
				switch(geshi){
				case 1:form1();break;
				case 2:form2();break;
				default:
					System.out.println("格式标志输入错误");
				}
			}
			//抛出异常
			catch(NumberException e){
				System.out.println(e.toString());
			}
			//抛出异常
			catch(MyException e){
				System.out.println(e.toString());
			}
		}else{
			System.out.println("输入错误,请看以上提示");
		}


	}
	public void setForm(String str) throws MyException{
		//对格式进行检测
		if(arrays[4]!='/'||arrays[7]!='/'){
			throw new MyException(str);
		}
	}
	public void setNumber(String str) throws NumberException{
		//对数字进行检测
		if((arrays[0]&arrays[1]&arrays[2]&arrays[3]&arrays[5]&arrays[6]&arrays[8]&arrays[9])<48||(arrays[0]&arrays[1]&arrays[2]&arrays[3]&arrays[5]&arrays[6]&arrays[8]&arrays[9])>57){
			throw new NumberException(str);
		}
	}
	private void form1(){
		Date date=new Date();
		//实现日期的格式化
		SimpleDateFormat form=new SimpleDateFormat("日期为:"+str);
		String timePattern=form.format(date);
		System.out.println(timePattern);
	}
	private void form2(){
		Date date=new Date();
		//将输入字符串里的‘/’全部转化成‘-’
		String str1=str.replaceAll("/", "-"); 
		//实现日期的格式化
		SimpleDateFormat form=new SimpleDateFormat("日期为:"+str1);
		String timePattern=form.format(date);
		System.out.println(timePattern);
	}
	private void printSystemTime(){
		Date date=new Date();
		//实现日期的格式化
		SimpleDateFormat form=new SimpleDateFormat("'日期为:'y年M月d日");
		String timePattern=form.format(date);
		System.out.println(timePattern);
	}
	private void form3(){
		Date date=new Date();
		//实现日期的格式化
		SimpleDateFormat form=new SimpleDateFormat("'日期为:'yyyy年MMMd日E");
		try{
			date=form.parse(str);
		}catch(ParseException e){
			e.printStackTrace();
		}
		System.out.println(date);
	}
}

2  自定义 检测数字字符类

/**
 * 
 */
package PrintDate;

/**
 * @author HuangRong
 * function:对输入的年,月,日数字字符的检测的异常类
 */
public class NumberException extends Exception{

	String msg;
	public NumberException(String m){
		msg="您输入的字符串"+m+"年、月、日位置处有非数字字符";
	}
	public String toString(){
		return msg;
	}
}

3 自定义检测输入的字符串格式
/**
 * 
 */
package PrintDate;

/**
 * @author HuangRong
 * function:对输入的字符串进行格式检测的异常类
 */
public class MyException extends Exception{

	String msg;
	public MyException(String m){
		msg="日期字符串"+m+"格式输入不正确";
	}
	public String toString(){
		return msg;
	}
}
/**
 * 
 */
package PrintDate;


/**
 * @author HuangRong
 *(1)程序可根据需要选择输出系统时间还是从键盘自行输入时间
 *  (1 输出系统时间  2 从键盘输入时间(输入的格式必须为xxxx/xx/xx格式))
 *(2)程序可根据需要选择输出时间的格式
 *  (1 为xxxx/xx/xx格式  2 为xxxx-xx-xx格式)
 *(3)程序使用Class实例化一个StrToDate类对象
 */
public class PrintDate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try{
			//得到StrToDate类对象
			Class cs=Class.forName("PrintDate.StrToDate");
			//得到实例,开辟开辟空间
	        StrToDate strtodate=(StrToDate)cs.newInstance();
	        strtodate.Convert();
		}
		catch(Exception e){
			System.out.println("输入字符串长度不对,不能加载StrToDate类"+e.getMessage());
		}
	}

}


测试截屏:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值