JAVA2012年2月29日
- 格式:doc
- 大小:95.00 KB
- 文档页数:7
Java输⼊某年某⽉某⽇,判断这⼀天是这⼀年的第⼏天?分析:⼤家都知道,每年的总共⽇期,要么就是365天,要么就是366天,具体是取决于闰年还是平年,更确切的说就是每年⼆⽉是28天还是29天,归结到这个问题,有⼀个关键的认识点,就是求解这⼀年是闰年(366天)还是平年(365天)。
平年还是闰年计算算法:1. 年份能被4整除,但不能被100整除;2. 能被400整除下⾯给出具体算法:package test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/*** 题⽬:输⼊某年某⽉某⽇,判断这⼀天是这⼀年的第⼏天?*/public class NaYiTian {public static void main(String[] args){BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));try {//录⼊键盘的数据String str=bf.readLine();//分割年⽉⽇String[] strArr=str.split("-");int year=Integer.parseInt(strArr[0]);int month=Integer.parseInt(strArr[1]);int towMonth=28;//判断平年还是闰年if((year%4==0&&year%100!=0)||(year%400==0)){towMonth=29;//闰年多⼀天}int totalDay=0;int[] months={31,towMonth,31,30,31,30,31,31,30,31,30,31};//前⼏个⽉加上本⽉的天数for(int i=0;i<months.length;i++){if(month>=i+1){if(month==i+1){totalDay+=Integer.parseInt(strArr[2]);break;}else{totalDay+=months[i];}}}//输出结果System.out.println(totalDay);} catch (IOException e) {e.printStackTrace();}}}来⾃微信公众号:编程社程序员⽇常进阶宝典,欢迎关注!。
JDK各个版本发布时间和版本名称版本名称发⾏⽇期JDK 1.0Oak(橡树)1996-01-23JDK 1.11997-02-19JDK 1.1.4Sparkler(宝⽯)1997-09-12JDK 1.1.5Pumpkin(南⽠)1997-12-13JDK 1.1.6Abigail(阿⽐盖尔–⼥⼦名)1998-04-24JDK 1.1.7Brutus(布鲁图–古罗马政治家和将军)1998-09-28JDK 1.1.8Chelsea(切尔西–城市名)1999-04-08J2SE 1.2Playground(运动场)1998-12-04J2SE 1.2.1none(⽆)1999-03-30J2SE 1.2.2Cricket(蟋蟀)1999-07-08J2SE 1.3Kestrel(美洲红隼)2000-05-08J2SE 1.3.1Ladybird(瓢⾍)2001-05-17J2SE 1.4.0Merlin(灰背隼)2002-02-13J2SE 1.4.1grasshopper(蚱蜢)2002-09-16J2SE 1.4.2Mantis(螳螂)2003-06-26Java SE 5.0 (1.5.0)Tiger(⽼虎)2004-09-30Java SE 6.0 (1.6.0)Mustang(野马)2006-04Java SE 7.0 (1.7.0)Dolphin(海豚)2011-07-28Java SE 8.0 (1.8.0)Spider(蜘蛛)2014-03-18Java SE 9.02017-09-21Java SE 10.02018-03-21Java SE 11.02018-09-25从这个表中我们可以看出⼀个⾮常有意思的现象,就是JDK的每⼀个版本号都使⽤⼀个开发代号表⽰(就是表中的中⽂名)。
⽽且从JDK1.2.2 开始,主要版本(如1.3,1.4,5.0)都是以鸟类或哺乳动物来命名的. ⽽它们的bug修正版本(如1.2.2,1.3.1,1.4.2)都是以昆⾍命名的。
JA V A处理日期时间常用方法:java.util.CalendarCalendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期提供了一些方法。
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970 年 1 月1 日的00:00:00。
000,格里高利历的偏移量.例:Calendar cal = Calendar。
getInstance(;//使用默认时区和语言环境获得一个日历。
cal。
add(Calendar.DAY_OF_MONTH, -1;//取当前日期的前一天。
cal。
add(Calendar。
DAY_OF_MONTH, +1;//取当前日期的后一天。
//通过格式化输出日期java.text.SimpleDateFormat format = new java.text。
SimpleDateFormat(”yyyy-MM—dd";System。
out.println("Today is:”+format。
format(Calendar.getInstance(.getTime (;System。
out.println("yesterday is:"+format.format(cal.getTime(;得到2007—12-25日期: Calendar calendar = new GregorianCalendar(2007,11, 25,0,0,0;Date date = calendar.getTime(;System。
out.println("2007 Christmasis:”+format.format(date;//java月份是从0—11,月份设置时要减1。
//GregorianCalendar构造方法参数依次为:年,月—1,日,时,分,秒。
绪论单元测试1.Java语言最初是面向哪个应用领域设计的?A:CADB:制造业C:InternetD:消费电子产品答案:D2.Java在()年的3月23日诞生。
A:1997B:1995C:1991D:1993答案:B第一章测试1.Java 语言使用的字符码集是A:UnicodeB:ASCIIC:BCDD:DCB答案:A2.Java 源文件和编译后的文件扩展名分别为A:.class和 .javaB:.java 和 .classC:.class和 .classD:.java和 .java答案:B3.关于方法main ()的说法哪个正确?A:main()的头定义可以根据情况任意更改B:所有对象的创建都必须放在main()方法中C:一个类中可以没有main()方法D:方法main ()只能放在公共类中答案:C4.Java语言具有许多优点和特点, 下列选项中, 哪个反映了Java 程序并行机制的特点:A:安全性B:跨平台C:多线程D:可移植答案:C5.下面哪个类名的定义是正确的?A:IntegerB:DoubleC:StringDemoD:String答案:C6.Java体系主要分为三部分,下列哪个选项不是其中的一个组成部分?A:Java EEB:Java SEC:Java MED:Java AE答案:D7.Java 运行时解释器是哪个命令?A:javawB:javaeC:javaD:javac答案:C8.Java语言是以爪哇岛咖啡的名字命名的。
A:错B:对答案:B第二章测试1.数组也是对象。
A:错B:对答案:B2.Java中数组的元素只能是简单数据类型。
A:对B:错答案:B3.为了使包ch4在当前程序中可见,可以使用的语句是A:package ch4.;B:ch4 package;C:import ch4.;D:ch4 import;答案:C4.关于选择结构下列哪个说法正确?A:if 语句和 else 语句必须成对出现B:switch 结构中必须有default 语句C:switch 结构中每个case 语句中必须用break 语句D:if 语句可以没有else 语句对应答案:D5.while 循环和do…while循环的区别是:A:没有区别,这两个结构任何情况下效果一样B:while 循环是先循环后判断,所以循环体至少被执行一次C:while 循环比do…while循环执行效率高D:do…while循环是先循环后判断,所以循环体至少被执行一次答案:D6.return 语句:A:方法都必须含有B:不能用来返回对象C:只能让方法返回数值D:方法中可以有多句return答案:D7.下列哪个是Java应用程序主类中正确的main方法?A:public void main(String args[])B:public static void Main(String args[])C:public static void main(String args[])D:static void main(String args[])答案:C8.设x=1,y=2,z=3,则表达式y+=z--/++x的值是( )A:5B:3.5C:3D:4答案:C9.以下定义一维数组a正确的是?A:int[4] a={1,2,3,4};B:int [] a=new int[4];C:int[4] a=new int[4];D:int[] a=new int[4]{1,2,3,4};答案:B第三章测试1.在Java程序中,可以使用protected来修饰一个类。
Java使⽤DateTimeFormatter格式化输⼊的⽇期时间要求:⽤DateTimeFormatter实现: ⽤扫描器获取输⼊的时间(年⽉⽇时分),这个时间的格式是常⽤的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输⼊时间.格式化的时间参考企业微信聊天记录的展⽰时间分析:1.时间的常⽤格式为:xxxx-xx-xx xx:xxxxxx/xx/xx xx:xxxxxx.xx.xx xx:xx等格式2.微信显式时间格式为:今天显式: 00:01 - 23:59 ;昨天显式: 昨天 01:01 ;前天显式: 周⼏ 02:02往前推⼀周都显式: 周⼏ 02:02 ;时间再往前推只显⽰: ⼏⽉⼏⽇ 02:02不同年则显式: ⼏年⼏⽉⼏⽇ 02:02也可考虑写⼀个明天显式: 明天 02:02其余时间显式: ⼏⽉⼏⽇ 02:023.考虑特殊情况下的⽇期:⽐如当前天是1号则上个⽉的最后⼀天是昨天往前推⼀周则显式:星期⼏ 02:02如果当前天不⼤于7号则向前推⼀周到了上个⽉也要考虑将其转换为星期4.先输⼊⼀个时间,再对这个时间使⽤DateTimeFormatter进⾏格式化⽐如:输⼊: 2020-1-11 12:22则格式化结果为:下午 12:22代码实现程序开始:package hrkj.chapter7.dateTimeFormatter.Test1;/*** 程序开始⼊⼝ <br>* 2020年1⽉9⽇下午7:10:04** @author wcf* @version 1.0*/public class Test {/*** 程序⼊⼝** @param args ⼊⼝参数*/public static void main(String[] args) {// 程序开始运⾏DateTimeFormatterTest.inoutDateTime();}}⽇期时间等需要⽤到的正则表达式:package hrkj.chapter7.dateTimeFormatter.Test1;/*** ⽇期时间的正则表达式 <br>* 2020年1⽉9⽇下午7:25:11** @author wcf* @version 1.0*/public enum Regex {/*** 匹配闰年*/LEEP_YEAR("((\\d{2}(0[48]|[2468][048]|[13579][26]))|((0[48]|[2468][048]|[13579][26])00))[-\\/\\.]0?2[-\\/\\.]29"),/*** 匹配平年*/COMMON_YEAR("(\\d{3}[1-9]|\\d{2}[1-9]\\d|\\d[1-9]\\d{2}|[1-9]\\d{3})[-\\/\\.]((0?[13578]|1[02])[-\\/\\.](0?[1-9]|[12]\\d|3[01])|((0?[469]|11)[-\\/\\.](0?[1-9]|[12]\\d|30))|(0?2[-\\/\\.](0?[1-9]|1\\d|2[0-8])))"), /*** 匹配时间*/TIME(" ([01]?\\d|2[0-3]):[0-5]?\\d"),/*** 退出程序*/EXIT("exit|退出");/*** 正则*/private final String str;/*** 有参构造器** @param string 正则*/private Regex(String string) {this.str = string;}/*** 获取正则** @return 正则*/public String getStr() {return str;}}提⽰信息:package hrkj.chapter7.dateTimeFormatter.Test1;/*** 提⽰信息 <br>* 2020年1⽉9⽇下午7:25:53** @author wcf* @version 1.0*/public enum Hint {/*** 请输⼊⽇期时间*/INPUT_DATE_TIME("请输⼊⽇期时间:"),/*** ⽇期时间格式*/DATETIMEFORMAT("常⽤格式:xxxx-xx-xx xx:xx\n\t xxxx/xx/xx xx:xx\n\t xxxx.xx.xx xx:xx"),/*** ⽇期错误*/INVOKE_DATE("⽇期错误"),/*** 时间错误*/INVOKE_TIME("时间错误"),/*** ⽇期时间错误*/INVOKE_DATE_TIME("⽇期时间错误!"),/*** 继续或退出*/CONTINUE_OR_QUIT("exit:程序退出\n请输⼊:"),/*** 程序结束*/END_OF_PROGRAM("退出成功,程序结束!");/*** 提⽰*/private final String str;/*** 有参构造器** @param str 提⽰*/private Hint(String str) {this.str = str;}/*** 获取提⽰*/public void println() {System.out.println(str);}}⽇期时间格式化的模板字符串:package hrkj.chapter7.dateTimeFormatter.Test1;/*** ⽇期时间格式化的模板字符串 <br>* 2019年3⽉1⽇下午7:17:19** @author wcf* @version 1.0*/public enum Pattern {/*** 上下午时分*/TIME("a HH:mm"),/*** 昨天时分*/YESTERDAY("昨天 HH:mm"),/*** 明天时分*/TOMORROW("明天 HH:mm"),/*** 星期时分*/WEEK_TIME("E HH:mm"),/*** ⽉⽇时分*/MONTH_DAY_TIME("M⽉d⽇ HH:mm"),/*** 年⽉⽇时分*/YEAR_MONTH_DAY_TIME("y年M⽉d⽇ HH:mm");/*** 显式模式*/private final String str;/*** 有参数构造器** @param str 模式*/private Pattern(String str) {this.str = str;}/*** 获取显式模式** @return 显式模式*/public String getStr() {return str;}}输⼊⽇期时间进⾏处理:package hrkj.chapter7.dateTimeFormatter.Test1;import java.util.Scanner;/*** 输⼊⽇期时间进⾏处理 <br>* 2020年1⽉9⽇下午7:09:31** @author wcf* @version 1.0*/public class DateTimeFormatterTest {/*** 闰年正则*/private final static String LEEP_YEAR = Regex.LEEP_YEAR.getStr(); /*** 平年正则*/private final static String COMMON_YEAR = MON_YEAR.getStr();/*** 时间正则*/private final static String TIME = Regex.TIME.getStr();/*** 退出正则*/private final static String EXIT = Regex.EXIT.getStr();/*** 静态初始化块*/static {// 输⼊提⽰Hint.INPUT_DATE_TIME.println();// ⽇期时间格式Hint.DATETIMEFORMAT.println();// 退出指令Hint.CONTINUE_OR_QUIT.println();}/*** 私有构造器*/private DateTimeFormatterTest() {// 私有构造器// ⽆法创建本类实例}/*** 输⼊⽇期时间*/public static void inoutDateTime() {// 扫描器Scanner scanner = new Scanner(System.in);// 扫描控制台输⼊while (scanner.hasNextLine()) {// 接收控制台输⼊,并去除输⼊前后的空格String str = scanner.nextLine().trim();// 对输⼊的字符进⾏判断if (str.matches(EXIT)) {// 程序退出Hint.END_OF_PROGRAM.println();// 关闭扫描器scanner.close();// 退出虚拟机System.exit(0);// 判断平闰年} else if (str.matches(LEEP_YEAR + TIME) || str.matches(COMMON_YEAR + TIME)) {// 对输⼊的⽇期时间字符串进⾏格式化DateTimeFormatterTools.format(str);// 格式化后提⽰Hint.CONTINUE_OR_QUIT.println();} else {// 输⼊的⽇期时间不正确Hint.INVOKE_DATE_TIME.println();// 输⼊提⽰Hint.INPUT_DATE_TIME.println();continue;}}}}对输⼊的⽇期时间进⾏处理:package hrkj.chapter7.dateTimeFormatter.Test1;import java.time.LocalDateTime;import java.time.MonthDay;import java.time.Year;import java.time.format.DateTimeFormatter;import java.util.Arrays;/*** 对输⼊的⽇期时间进⾏处理 <br>* 2020年1⽉9⽇下午8:08:45** @author wcf* @version 1.0*/public class DateTimeFormatterTools {/*** 年⽉⽇时分*/private static final String YEAR_MONTH_DAY_TIME = Pattern.YEAR_MONTH_DAY_TIME.getStr(); /*** ⽉⽇时分*/private static final String MONTH_DAY_TIME = Pattern.MONTH_DAY_TIME.getStr();/*** 星期时分*/private static final String WEEK_TIME = Pattern.WEEK_TIME.getStr();/*** 上下午时分*/private static final String TIME = Pattern.TIME.getStr();/*** 昨天时分*/private static final String YESTERDAY = Pattern.YESTERDAY.getStr();/*** 明天时分*/private static final String TOMORROW = Pattern.TOMORROW.getStr();/*** 当前年*/private static int currentYear = Year.now().getValue();/*** 当前⽉*/private static int currentMonth = MonthDay.now().getMonthValue();/*** 当前⽇*/private static int currentDay = MonthDay.now().getDayOfMonth();/*** ⼤⽉*/private static int[] bigMonth = { 1, 3, 5, 7, 8, 10, 12 };/*** ⼩⽉*/private static int[] smallMonth = { 4, 6, 9, 11 };/*** 私有构造器*/private DateTimeFormatterTools() {// 私有构造器,⽆法实例化}/*** 处理输⼊的⽇期时间** @param str 输⼊的⽇期时间*/public static void format(String str) {// 将⽇期和时间⽤空格进⾏分割String[] datetime = str.split(" ");// 分割成的⽇期String date = datetime[0];// 分割成的时间String time = datetime[1];// ⽇期分割⽅式String splitter = "";// ⽇期可以⽤- . / 进⾏分割// 如果包含了-./这三种中的⼀种,则⽤这些进⾏分割if (date.contains(".")) {splitter = "\\.";} else if (date.contains("-")) {splitter = "-";} else if (date.contains("/")) {splitter = "/";}// 使⽤⽇期的分割⽅式对⽇期进⾏分割String[] dateString = date.split(splitter);// 使⽤:对时间进⾏分割,时间只能⽤:进⾏分割String[] timeString = time.split(":");// 时间分割后的数组长度不是2则错误,因为输⼊的的时间只有时和分if (timeString.length != 2) {// 时间错误Hint.INVOKE_TIME.println();return;}// ⽇期分割后的数组长度不是3则错误,因为输⼊的⽇期要有年,⽉和⽇if (dateString.length != 3) {// ⽇期错误Hint.INVOKE_DATE.println();return;}// 输⼊的年int year = Integer.valueOf(dateString[0]);// 输⼊的⽉int month = Integer.valueOf(dateString[1]);// 输⼊的⽇int day = Integer.valueOf(dateString[2]);// 输⼊的时int hour = Integer.valueOf(timeString[0]);// 输⼊的分int minute = Integer.valueOf(timeString[1]);// 对拆解判断过的字符串进⾏重新组合String str1 = year + splitter + month + splitter + day + " " + hour + ":" + minute;// 对组合后的字符串进⾏解析DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("y" + splitter + "M" + splitter + "d" + " H:m"); // 将字符串解析成⽇期时间对象LocalDateTime parse = LocalDateTime.parse(str1, ofPattern);// 同⼀年if (year == currentYear) {// 同⼀⽉if (month == currentMonth) {// 同⼀天if (day == currentDay) {// 今天printDateTime(TIME, parse);} else if (day - currentDay == 1) {// 明天printDateTime(TOMORROW, parse);} else if (day - currentDay == -1) {// 昨天printDateTime(YESTERDAY, parse);} else if (day - currentDay >= -7 && day - currentDay <= -2) {// 向前⼀周以星期来表⽰printDateTime(WEEK_TIME, parse);} else {// 不同天printDateTime(MONTH_DAY_TIME, parse);}// 下个⽉} else if (month - currentMonth == 1) {// 如果输⼊的⽇是1,则判断当前⽉和天if (day == 1) {// 判断是⼤⽉⼩⽉还是⼆⽉,如果当前天数是⽉份最后⼀天,则输出明天if (Arrays.binarySearch(bigMonth, currentMonth) >= 0 && currentDay == 31) {// 明天printDateTime(TOMORROW, parse);return;} else if (Arrays.binarySearch(smallMonth, currentMonth) >= 0 && currentDay == 30) { // 明天printDateTime(TOMORROW, parse);return;} else if (currentMonth == 2) {// 判断输⼊的是闰年还是平年if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {if (currentDay == 29) {// 明天printDateTime(TOMORROW, parse);return;}} else {if (currentDay == 28) {// 明天printDateTime(TOMORROW, parse);return;}}} else {// 使⽤⽉⽇进⾏输出printDateTime(MONTH_DAY_TIME, parse);}} else {// 输⼊的⽇不是1,这输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);}// 上⼀⽉} else if (month - currentMonth == -1) {// 如果当前⽇是1,则判断输⼊⽇是否是上⽉最后⼀天if (currentDay == 1) {// 判断是⼤⽉⼩⽉还是⼆⽉,输⼊的天数是不是⽉份的最后⼀天,是则是昨天if (Arrays.binarySearch(bigMonth, month) >= 0 && day == 31) {// 昨天printDateTime(YESTERDAY, parse);return;} else if (Arrays.binarySearch(smallMonth, month) >= 0 && day == 30) {// 昨天printDateTime(YESTERDAY, parse);return;} else if (month == 2) {// 判断是闰年还是平年if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {if (day == 29) {// 昨天printDateTime(YESTERDAY, parse);return;}} else {if (day == 28) {// 昨天printDateTime(YESTERDAY, parse);return;}}}}// 如果当前⽇不⼩于7,则输⼊⽉⽇时分,⼩于7则从当前天往前⼀周转换为星期if (currentDay >= 7) {// 输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);// 如果当前天⼩于7,则当前天向前⼀周转换为星期} else if (Arrays.binarySearch(bigMonth, month) >= 0 && 31 - day + currentDay < 7) {// 年⽉⽇转换为星期printDateTime(WEEK_TIME, parse);} else if (Arrays.binarySearch(smallMonth, month) >= 0 && 30 - day + currentDay < 7) { // 年⽉⽇转换为星期printDateTime(WEEK_TIME, parse);} else if (month == 2) {// 判断是闰年还是平年if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {if (29 - day + currentDay < 7) {// 年⽉⽇转换为星期printDateTime(WEEK_TIME, parse);} else {// 如果向前超出了⼀周输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);}} else {if (28 - day + currentDay < 7) {// 年⽉⽇转换为星期printDateTime(WEEK_TIME, parse);} else {// 如果向前超出了⼀周输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);}}} else {// 当前天向前超出了⼀周输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);}} else {// 不同⽉,输出⽉⽇时分printDateTime(MONTH_DAY_TIME, parse);}} else {// 不同年,输出年⽉⽇时分printDateTime(YEAR_MONTH_DAY_TIME, parse);}}/*** 格式化结果** @param pattern 模式字符串* @param datetime 时间*/private static void printDateTime(String pattern, LocalDateTime datetime) {// 通过模式字符串对时间进⾏格式化DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern(pattern);// 打印格式化后的时间System.out.println("格式化结果:\n\t" + ofPattern.format(datetime));}}代码测试结果:请输⼊⽇期时间:常⽤格式:xxxx-xx-xx xx:xxxxxx/xx/xx xx:xxxxxx.xx.xx xx:xxexit:程序退出请输⼊:2020-1-11 12:22格式化结果:下午 12:22exit:程序退出请输⼊:2020-1-11 2:22格式化结果:上午 02:22exit:程序退出请输⼊:2020-1-10 1:22格式化结果:昨天 01:22exit:程序退出请输⼊:2020-1-7 12:22格式化结果:周⼆ 12:22exit:程序退出请输⼊:2020-1-12 12:22格式化结果:明天 12:22exit:程序退出请输⼊:2020-1-13 12:22格式化结果:1⽉13⽇ 12:22exit:程序退出请输⼊:2020-2-22 12:22格式化结果:2⽉22⽇ 12:22exit:程序退出请输⼊:2019-12-31 12:22格式化结果:2019年12⽉31⽇ 12:22exit:程序退出请输⼊:更多情况测试,或者代码简化,请⾃⾏探索测试以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java获取当天,前天,明天,本周,本⽉,本年的开始⽇期时间和结束⽇期时间1package demoone;23import java.sql.Timestamp;4import java.text.ParseException;5import java.text.SimpleDateFormat;6import java.util.ArrayList;7import java.util.Calendar;8import java.util.Date;9import java.util.GregorianCalendar;10import java.util.List;1112public class DateUtils {13//获取当天的开始时间14public static java.util.Date getDayBegin() {15 Calendar cal = new GregorianCalendar();16 cal.set(Calendar.HOUR_OF_DAY, 0);17 cal.set(Calendar.MINUTE, 0);18 cal.set(Calendar.SECOND, 0);19 cal.set(LISECOND, 0);20return cal.getTime();21 }22//获取当天的结束时间23public static java.util.Date getDayEnd() {24 Calendar cal = new GregorianCalendar();25 cal.set(Calendar.HOUR_OF_DAY, 23);26 cal.set(Calendar.MINUTE, 59);27 cal.set(Calendar.SECOND, 59);28return cal.getTime();29 }30//获取昨天的开始时间31public static Date getBeginDayOfYesterday() {32 Calendar cal = new GregorianCalendar();33 cal.setTime(getDayBegin());34 cal.add(Calendar.DAY_OF_MONTH, -1);35return cal.getTime();36 }37//获取昨天的结束时间38public static Date getEndDayOfYesterDay() {39 Calendar cal = new GregorianCalendar();40 cal.setTime(getDayEnd());41 cal.add(Calendar.DAY_OF_MONTH, -1);42return cal.getTime();43 }44//获取明天的开始时间45public static Date getBeginDayOfTomorrow() {46 Calendar cal = new GregorianCalendar();47 cal.setTime(getDayBegin());48 cal.add(Calendar.DAY_OF_MONTH, 1);4950return cal.getTime();51 }52//获取明天的结束时间53public static Date getEndDayOfTomorrow() {54 Calendar cal = new GregorianCalendar();55 cal.setTime(getDayEnd());56 cal.add(Calendar.DAY_OF_MONTH, 1);57return cal.getTime();58 }59//获取本周的开始时间60public static Date getBeginDayOfWeek() {61 Date date = new Date();62if (date == null) {63return null;64 }65 Calendar cal = Calendar.getInstance();66 cal.setTime(date);67int dayofweek = cal.get(Calendar.DAY_OF_WEEK);68if (dayofweek == 1) {69 dayofweek += 7;70 }71 cal.add(Calendar.DATE, 2 - dayofweek);72return getDayStartTime(cal.getTime());73 }74//获取本周的结束时间75public static Date getEndDayOfWeek(){76 Calendar cal = Calendar.getInstance();77 cal.setTime(getBeginDayOfWeek());78 cal.add(Calendar.DAY_OF_WEEK, 6);79 Date weekEndSta = cal.getTime();80return getDayEndTime(weekEndSta);81 }82//获取本⽉的开始时间83public static Date getBeginDayOfMonth() {84 Calendar calendar = Calendar.getInstance();85 calendar.set(getNowYear(), getNowMonth() - 1, 1);86return getDayStartTime(calendar.getTime());87 }88//获取本⽉的结束时间89public static Date getEndDayOfMonth() {90 Calendar calendar = Calendar.getInstance();91 calendar.set(getNowYear(), getNowMonth() - 1, 1);92int day = calendar.getActualMaximum(5);93 calendar.set(getNowYear(), getNowMonth() - 1, day);94return getDayEndTime(calendar.getTime());95 }96//获取本年的开始时间97public static java.util.Date getBeginDayOfYear() {98 Calendar cal = Calendar.getInstance();99 cal.set(Calendar.YEAR, getNowYear());100// cal.set101 cal.set(Calendar.MONTH, Calendar.JANUARY);102 cal.set(Calendar.DATE, 1);103104return getDayStartTime(cal.getTime());105 }106//获取本年的结束时间107public static java.util.Date getEndDayOfYear() {108 Calendar cal = Calendar.getInstance();109 cal.set(Calendar.YEAR, getNowYear());110 cal.set(Calendar.MONTH, Calendar.DECEMBER);111 cal.set(Calendar.DATE, 31);112return getDayEndTime(cal.getTime());113 }114//获取某个⽇期的开始时间115public static Timestamp getDayStartTime(Date d) {116 Calendar calendar = Calendar.getInstance();117if(null != d) calendar.setTime(d);118 calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);119 calendar.set(LISECOND, 0);120return new Timestamp(calendar.getTimeInMillis());121 }122//获取某个⽇期的结束时间123public static Timestamp getDayEndTime(Date d) {124 Calendar calendar = Calendar.getInstance();125if(null != d) calendar.setTime(d);126 calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59); 127 calendar.set(LISECOND, 999);128return new Timestamp(calendar.getTimeInMillis());129 }130//获取今年是哪⼀年131public static Integer getNowYear() {132 Date date = new Date();133 GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();134 gc.setTime(date);135return Integer.valueOf(gc.get(1));136 }137//获取本⽉是哪⼀⽉138public static int getNowMonth() {139 Date date = new Date();140 GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();141 gc.setTime(date);142return gc.get(2) + 1;143 }144//两个⽇期相减得到的天数145public static int getDiffDays(Date beginDate, Date endDate) {146147if (beginDate == null || endDate == null) {148throw new IllegalArgumentException("getDiffDays param is null!");149 }150151long diff = (endDate.getTime() - beginDate.getTime())152 / (1000 * 60 * 60 * 24);153154int days = new Long(diff).intValue();155156return days;157 }158//两个⽇期相减得到的毫秒数159public static long dateDiff(Date beginDate, Date endDate) {160long date1ms = beginDate.getTime();161long date2ms = endDate.getTime();162return date2ms - date1ms;163 }164//获取两个⽇期中的最⼤⽇期165public static Date max(Date beginDate, Date endDate) {166if (beginDate == null) {167return endDate;168 }169if (endDate == null) {170return beginDate;171 }172if (beginDate.after(endDate)) {173return beginDate;174 }175return endDate;176 }177//获取两个⽇期中的最⼩⽇期178public static Date min(Date beginDate, Date endDate) {179if (beginDate == null) {180return endDate;181 }182if (endDate == null) {183return beginDate;184 }185if (beginDate.after(endDate)) {186return endDate;187 }188return beginDate;189 }190//返回某⽉该季度的第⼀个⽉191public static Date getFirstSeasonDate(Date date) {192final int[] SEASON = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 };193 Calendar cal = Calendar.getInstance();194 cal.setTime(date);195int sean = SEASON[cal.get(Calendar.MONTH)];196 cal.set(Calendar.MONTH, sean * 3 - 3);197return cal.getTime();198 }199//返回某个⽇期下⼏天的⽇期200public static Date getNextDay(Date date, int i) {201 Calendar cal = new GregorianCalendar();202 cal.setTime(date);203 cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);204return cal.getTime();205 }206//返回某个⽇期前⼏天的⽇期207public static Date getFrontDay(Date date, int i) {208 Calendar cal = new GregorianCalendar();209 cal.setTime(date);210 cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);211return cal.getTime();212 }213//获取某年某⽉到某年某⽉按天的切⽚⽇期集合(间隔天数的⽇期集合)214public static List getTimeList(int beginYear, int beginMonth, int endYear, 215int endMonth, int k) {216 List list = new ArrayList();217if (beginYear == endYear) {218for (int j = beginMonth; j <= endMonth; j++) {219 list.add(getTimeList(beginYear, j, k));220221 }222 } else {223 {224for (int j = beginMonth; j < 12; j++) {225 list.add(getTimeList(beginYear, j, k));226 }227228for (int i = beginYear + 1; i < endYear; i++) {229for (int j = 0; j < 12; j++) {230 list.add(getTimeList(i, j, k));231 }232 }233for (int j = 0; j <= endMonth; j++) {234 list.add(getTimeList(endYear, j, k));235 }236 }237 }238return list;239 }240//获取某年某⽉按天切⽚⽇期集合(某个⽉间隔多少天的⽇期集合)241public static List getTimeList(int beginYear, int beginMonth, int k) {242 List list = new ArrayList();243 Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1); 244int max = begincal.getActualMaximum(Calendar.DATE);245for (int i = 1; i < max; i = i + k) {246 list.add(begincal.getTime());247 begincal.add(Calendar.DATE, k);248 }249 begincal = new GregorianCalendar(beginYear, beginMonth, max);250 list.add(begincal.getTime());251return list;252 }253 }1//获取某年某⽉的第⼀天⽇期2public static Date getStartMonthDate(int year, int month) {3 Calendar calendar = Calendar.getInstance();4 calendar.set(year, month - 1, 1);5return calendar.getTime();6 }78//获取某年某⽉的最后⼀天⽇期9public static Date getEndMonthDate(int year, int month) {10 Calendar calendar = Calendar.getInstance();11 calendar.set(year, month - 1, 1);12int day = calendar.getActualMaximum(5);13 calendar.set(year, month - 1, day);14return calendar.getTime();15 }DateUtils。
/*** 正则表达式验证日期格式* @param args*/public static void main(String[] args){String checkValue = "2007-02-29";//String eL ="^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2 -9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{ 2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((1 6|[2468][048]|[3579][26])00))-0?2-29-))(20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$";String eL="^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\ \s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0 -9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([1 3579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][ 0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\ /\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";Pattern p = pile(eL);Matcher m = p.matcher(checkValue);boolean b = m.matches();if(b){System.out.println("格式正确");}else{System.out.println("格式错误");}}}一、简单的日期判断(YYYY/MM/DD):Java代码^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$二、演化的日期判断(YYYY/MM/DD| YY/MM/DD):Java代码^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$三、加入闰年的判断的:实例:Java代码^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\ d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0? [1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048] |[3579][26])00))-0?2-29-))$^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\ d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0? [1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048] |[3579][26])00))-0?2-29-))$分析:1、什么是合法的日期范围?对于不同的应用场景,这个问题有不同的解释。
JAVA将输⼊的⽇期转换为中⽂⽇期JAVA将输⼊的⽇期转换为中⽂⽇期(例如: 2007-10-05 --> ⼆○○七年⼗⽉五⽇)package com.business.practitioner;import java.text.SimpleDateFormat;import java.util.Date;/*** Creation date: 2010-5-22下午03:41:58* 功能: 将输⼊的⽇期转换为中⽂⽇期(例如: 2007-10-05 --> ⼆○○七年⼗⽉五⽇)* 说明:此程序假定输⼊格式为yyyy-mm-dd, 且年⽉⽇部分都为数字, 没有加上⾮法* 输⼊的相关校验* 测试可以输⼊ 2007-01-05* 2007-1-05* 2007-10-05*/public class DateConvertor {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubString issueDate = "2001-12-25";System.out.println(getYearStr(formatStr(issueDate)));}/*** create date:2010-5-22下午04:29:37* 描述:将⽇期转换为指定格式字符串* @param date ⽇期* @return*/public static String getDateStr(Date date){SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );String datestr = sdf.format(date);return datestr;}/*** create date:2010-5-22下午03:40:44* 描述:取出⽇期字符串中的年份字符串* @param str ⽇期字符串* @return*/public static String getYearStr(String str){String yearStr = "";yearStr = str.substring(0,4);return yearStr;}/*** create date:2010-5-22下午03:40:47* 描述:取出⽇期字符串中的⽉份字符串* @param str⽇期字符串* @return*/public static String getMonthStr(String str){String m;int startIndex = str.indexOf("年");int endIndex = str.indexOf("⽉");monthStr = str.substring(startIndex+1,endIndex);return monthStr;}/*** create date:2010-5-22下午03:32:31* 描述:将源字符串中的阿拉伯数字格式化为汉字* @param sign 源字符串中的字符* @return*/public static char formatDigit(char sign){if(sign == '0')sign = '0';if(sign == '1')sign = '⼀';if(sign == '2')sign = '⼆';if(sign == '3')sign = '三';if(sign == '4')sign = '四';if(sign == '5')sign = '五';if(sign == '6')sign = '六';if(sign == '7')sign = '七';if(sign == '8')sign = '⼋';if(sign == '9')sign = '九';return sign;}/*** create date:2010-5-22下午03:31:51* 描述:获得⽉份字符串的长度* @param str 待转换的源字符串* @param pos1 第⼀个'-'的位置* @param pos2 第⼆个'-'的位置* @return*/public static int getMidLen(String str,int pos1,int pos2){return str.substring(pos1+1, pos2).length();}/*** create date:2010-5-22下午03:32:17* 描述:获得⽇期字符串的长度* @param str 待转换的源字符串* @param pos2 第⼆个'-'的位置* @return*/public static int getLastLen(String str,int pos2){return str.substring(pos2+1).length();}/*** create date:2010-5-22下午03:40:50* 描述:取出⽇期字符串中的⽇字符串* @param str ⽇期字符串* @return*/public static String getDayStr(String str){String dayStr = "";int startIndex = str.indexOf("⽉");int endIndex = str.indexOf("⽇");dayStr = str.substring(startIndex+1,endIndex);return dayStr;}/*** create date:2010-5-22下午03:32:46* 描述:格式化⽇期* @param str 源字符串中的字符* @return*/public static String formatStr(String str){StringBuffer sb = new StringBuffer();int pos1 = str.indexOf("-");int pos2 = stIndexOf("-");for(int i = 0; i < 4; i++){sb.append(formatDigit(str.charAt(i)));}sb.append('年');if(getMidLen(str,pos1,pos2) == 1){sb.append(formatDigit(str.charAt(5))+"⽉");if(str.charAt(7) != '0'){if(getLastLen(str, pos2) == 1){sb.append(formatDigit(str.charAt(7))+"⽇");}if(getLastLen(str, pos2) == 2){if(str.charAt(7) != '1' && str.charAt(8) != '0'){sb.append(formatDigit(str.charAt(7))+"⼗"+formatDigit(str.charAt(8))+"⽇"); }else if(str.charAt(7) != '1' && str.charAt(8) == '0'){sb.append(formatDigit(str.charAt(7))+"⼗⽇");}else if(str.charAt(7) == '1' && str.charAt(8) != '0'){sb.append("⼗"+formatDigit(str.charAt(8))+"⽇");}else{sb.append("⼗⽇");}}}else{sb.append(formatDigit(str.charAt(8))+"⽇");}}if(getMidLen(str,pos1,pos2) == 2){if(str.charAt(5) != '0' && str.charAt(6) != '0'){sb.append("⼗"+formatDigit(str.charAt(6))+"⽉");if(getLastLen(str, pos2) == 1){sb.append(formatDigit(str.charAt(8))+"⽇");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(formatDigit(str.charAt(8))+"⼗"+formatDigit(str.charAt(9))+"⽇"); }else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(formatDigit(str.charAt(8))+"⼗⽇");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("⼗"+formatDigit(str.charAt(9))+"⽇");}else{sb.append("⼗⽇");}}else{sb.append(formatDigit(str.charAt(9))+"⽇");}}}else if(str.charAt(5) != '0' && str.charAt(6) == '0'){sb.append("⼗⽉");if(getLastLen(str, pos2) == 1){sb.append(formatDigit(str.charAt(8))+"⽇");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(formatDigit(str.charAt(8))+"⼗"+formatDigit(str.charAt(9))+"⽇"); }else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(formatDigit(str.charAt(8))+"⼗⽇");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("⼗"+formatDigit(str.charAt(9))+"⽇");}else{sb.append("⼗⽇");}}else{sb.append(formatDigit(str.charAt(9))+"⽇");}}}else{sb.append(formatDigit(str.charAt(6))+"⽉");if(getLastLen(str, pos2) == 1){sb.append(formatDigit(str.charAt(8))+"⽇");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(formatDigit(str.charAt(8))+"⼗"+formatDigit(str.charAt(9))+"⽇"); }else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(formatDigit(str.charAt(8))+"⼗⽇");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("⼗"+formatDigit(str.charAt(9))+"⽇");}else{sb.append("⼗⽇");}}else{sb.append(formatDigit(str.charAt(9))+"⽇");}}}}return sb.toString(); }}。
编程练习题
100以内的质数有
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,
61,67,71,73,79,83,89,97
1.编写应用程序,从10个数中找出最大值并输出。
public class java1_1_1{
public static void main(String args[]){
int a[]={10,5,4,9,3,8,7,6,12,51};
int max=a[0];
for(int i=1;i<10;i++){
if(max<a[i])
max=a[i];
}
System.out.println(max);
}
}
2.编写应用程序,对10个数从大到小降序排序并输出。
public class java1_1_1{
public static void main(String args[]){
int a[]={10,5,4,9,3,8,7,6,12,51};
int temp;
for(int i=0;i<10;i++){
for(int j=i;j<10;j++){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
for(int i=0;i<10;i++){
System.out.print(a[i]+"");
}
}
}
3.编写应用程序,求1~100之间的素数并输出。
public class java1_1_1{
public static void main(String args[]){
boolean f;
for(int i=1;i<=100;i++){
f=true;
for(int j=2;j<i;j++){
if(i%j==0){
f=false;
break;
}
}
if(f)
System.out.print(i+" ");
}
}
}
4.创建一个Rectangle类(矩形类),添加2个属性width、height,添
加2个方法计算矩形的周长和面积。
编程利用Rectangle类的对象计算并输出一个矩形的周长和面积。
class Rectangle{
private int width;
private int height;
public Rectangle(int n,int m){
this.width=n;
this.height=m;
}
public void s(){
System.out.println(this.width*this.height);
}
public void l(){
System.out.println(2*(this.width+this.height));
}
}
public class java1_1_1{
public static void main(String args[]){
Rectangle a1;
a1=new Rectangle(2,3);
a1.s();
a1.l();
}
}
5.创建一个描述平面图形的接口Figure,添加1个area( ) 方法计算
平面图形的面积。
再创建2个类Circle(圆类)和Square(正方形类)分别实现接口Figure的area( )方法,并写出测试类计算并输出1个圆和一个正方形的面积。
interface Figure{
public void s111();
}
class Circle implements Figure{
int r;
float pi=3.14F;
public Circle(int a){
this.r=a;
}
public void s111(){
System.out.println(pi*(this.r*this.r)); }
}
class Square implements Figure{
int m;
public Square(int a){
this.m=a;
}
public void s111(){
System.out.println(this.m*this.m); }
}
public class java1_1_1{
public static void main(String args[]){
Circle b1;
Square b2;
b1=new Circle(2);
b2=new Square(2);
b1.s();
b2.s();
}
}
6.编写Applet程序,在HTML调用这个Applet程序时向该程序传
入两个字符串参数,Applet程序将这两个参数取出来并将它们连接成一个字符串,最后将两个参数值和连接后的字符串显示出来。
<html>
<head>
<title>向Applet 传递参数</title>
</head>
<body>
<applet code="java4_3_1.class" height="200" width="200">
<param name="a1" value="我是">
<param name="a2" value="蒋海">
</applet>
</body>
</html>
import java.applet.Applet;
import java.awt.Graphics;
public class java4_3_1 extends Applet{
String a1,a2;
public void init(){
a1=getParameter("a1");
a2=getParameter("a2"); }
public void paint(Graphics g){
g.drawString(a1+a2,5,50);
}
}。