时间获取_Date\SimpleDateFormat\Calendar类
1.获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date date = new Date();
String now = sdf.format(date);
System.out.println(now);
}
}
2.把你的生日字符串表示转换为对应的日期对象.
比如2008-08-08转换成:2008年08月08号
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { String birthday = "2008-08-08"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = sdf.parse(birthday); String str = sdf.format(date); System.out.println(str); } catch (ParseException e) { e.printStackTrace(); } } }
3.500天后是几几年几月几日.
import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { //500天后是几几年几月几日. Calendar c = Calendar.getInstance(); c.add(Calendar.DATE,500); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DATE); System.out.println("500天后是:"+year+"年"+month+"月"+day+"日"); } }
4.编写一个校验用户名的程序,检测键盘录入的用户名是否合法 (正则表达式)
要求:必须以英文开头,只能包含英文,数字和`_`;最少6位,做多12位
import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("请输入用户名:"); Scanner sc = new Scanner(System.in); String userName = sc.nextLine(); if(userName.matches("[a-zA-Z][a-zA-Z_0-9]{5,11}")) { System.out.println("用户名合法.."); }else { System.out.println("用户名不合法....."); } } }
5.计算你活了多少天
package Task001; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { try{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birthDay = sdf.parse("1993-5-18"); long birthTime = birthDay.getTime(); long now = System.currentTimeMillis(); long liveTime = now - birthTime; long day = liveTime/1000/60/60/24; System.out.println("你已经来到这个地球"+day+"天了...."); }catch(Exception e){ e.printStackTrace(); } } }
6.写代码验证使用SimpleDateFormat把日期转换为字符串创建SimpleDateFormat对象的时候,比较消耗程序的执行性能
a) 使用System的currentTimeMillis()方法获取当前操作系统的毫秒值,作用程序执行的开始时间,使用start变量接收 b) 需要测试执行性能的代码 c) 使用System的currentTimeMillis()方法获取当前操作系统的毫秒值,作用程序执行的结束时间,使用end变量接收 d) 计算代码执行花费的时间 end - start,输出代码执行消耗的时间 3. 在Test14类中提供一个静态方法testSimpleDataFormatInLoop(),在方法中 a) 创建日期(Date)对象 now b) 写一个循环100000次的for循环 c) 在循环中 i. 创建SimpleDateFormat对象 df,并制定日期格式为yyyy-MM-dd ii. 调用df的format(Date date),传入now d) 在main方法中,需要测试执行的性能的代码处调用testSimpleDataFormatInLoop()方法 e) 记录程序执行的效率 4. 在Test14类,完整复制testSimpleDataFormatInLoop()方法 a) 改名为testSimpleDataFormatOutLoop b) 把创建SimpleDateFormat的代码移动到循环外部 c) 在main方法中,注释调用testSimpleDataFormatInLoop(); d) 在语句下一行调用testSimpleDataFormatOutLoop方法 e) 运行程序,查看输出结果,并记录 5. 得出结论: 创建日期格式对象,确实比较消耗程序性能,所以在实际开发一般会写一个工具类专门处理,日期的格式化与解析.
import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { try { long start = System.currentTimeMillis(); //testSimpleDataFormatInLoop();//447毫秒 testSimpleDataFormatOutLoop();//236毫秒 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse("2008-8-8"); long end = System.currentTimeMillis(); long useTime = end - start; System.out.println("消耗了" + useTime + "毫秒"); } catch (Exception e) { e.printStackTrace(); } } public static void testSimpleDataFormatInLoop(){ Date now; try{ long time = System.currentTimeMillis(); for(int i = 0;i < 100000; i++ ){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); now = sdf.parse("2018-3-12"); sdf.format(now); }}catch(Exception e){ e.printStackTrace(); } } public static void testSimpleDataFormatOutLoop(){ Date now; try{ long time = System.currentTimeMillis(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for(int i = 0;i < 100000; i++ ){ now = sdf.parse("2018-3-12"); sdf.format(now); }}catch(Exception e){ e.printStackTrace(); } } }
7.使用正则表达式切割字符串
* 192.168.105.27 按照 . 号切割字符串
* 18 22 40 65 按照空格切割字符串
提示: 由于 . 号 在正则表达式中用于匹配除换行符以外的任意字符,会把字符串切的连渣都不剩,此处使用 . 号需要转义;
使用\\.作为切割使用正则表达式
public class Test { public static void main(String[] args) { String str1 = "192.168.105.27"; String[] strs1 = str1.split("\\."); for (int i = 0; i < strs1.length; i++) { System.out.println(strs1[i]); } String str2 = "18 22 40 65"; String[] strs2 = str2.split("\\s+"); for (int i = 0; i < strs2.length; i++) { System.out.println(strs2[i]); } } }
8.有一段文本 " anglebaby 女 18 515151511 "
分别描述一个人的姓名 性别 年龄(int) 和QQ号码信息,完成如下需求:
1. 创建一个Person类,包含性别,性别,年龄和QQ号码属性,使用解析出来信息创建一个Person对象,并打印这个人信息
2. 并判断QQ号是否合法,匹配规则,全部都是数字,第一位非0,长度为5到12位.
Person类:
public class Student { private String name; private String sex; private int age; private String qq; public Student() { super(); } public Student(String name, String sex, int age, String qq) { super(); this.name = name; this.sex = sex; this.age = age; this.qq = qq; } public int getAge() { return age; } public String getName() { return name; } public String getQq() { return qq; } public String getSex() { return sex; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public void setQq(String qq) { this.qq = qq; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { System.out.println("Student [name=" + name + ", sex=" + sex + ", age=" + age + ", qq=" + qq + "]"); return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", qq=" + qq + "]"; } }
主方法:
public class Test { public static void main(String[] args) { String str = " anglebaby 女 18 515151511"; str.trim(); String[] strs = str.split("\\s+"); int age = Integer.parseInt(strs[2]); Student s = new Student(strs[0],strs[1],age,strs[3]); s.toString(); if(strs[3].matches("[1-9][0-9]{4,11}")){ System.out.println("qq合法...."); }else{ System.out.println("qq不合法...."); } } }
9.把字符串 "Hello12345World6789012" 中所有数字替换为 "#"
提示: 字符串类的replaceAll(String regex,string str)方法,使用str替换掉当前字符串中所有与正则表达式匹配的字符
public class Test { public static void main(String[] args) { String str = "Hello12345World6789012"; String newStr = str.replaceAll("\\d+", "#"); System.out.println(newStr); } }