日期类
第一代日期类
1.Date类 :精确到毫秒,代表特定的瞬间
2.SimpleDateFormat类 :格式和解析日期的类 SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化【日期 --> 文本】,解析【文本 --> 日期】和规范化
3.SimpleDateFormat 类需要掌握方法【format :格式形式 parse :转换解析【就是将字符串日期格式转成Date 类】】
4.一般情况下Date 类和SimpleDateFormat 类一起搭配使用
Date 和SimpleDateFormat 类案例演示
package wrapper_;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class date_Date01 {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println("当前系统日期="+date);
Date date1 = new Date(1688688888);
System.out.println("通过指定毫秒获取某个时间="+date1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String format = sdf.format(date);
System.out.println("通过format方法转化日期="+format);
String date3 = "1998-12-16 17:12:16";
Date parse = sdf.parse(date3);
System.out.println("通过字符串日期进行转化="+parse);
}
}
第二代日期类
1.主要就是Calendar 类【日历】
public abstract Calendar extends Object implements Serializable,Cloneable ,Comparable<Calendar>{}
2.Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR MONTH DAY_OF_MONTH HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段【例如获得下星期的日期】提供了一些方法
Calendar 类继承关系图
Calendar 类会使用相关的字段即可
下面如果我们需要按照 24 小时进行来获取时间,Calendar.HOUR 【这是十二进制】 == 改成 ==》Calendar.HOUR_OF_DAY 【这是二十四进制 】
Calendar 没有专门的格式化方法,所以需要程序员自己来组合显示
Calendar 类案例演示
package wrapper_.date_;
import java.util.Calendar;
public class Calendar01 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println("calendar="+calendar);
System.out.println("年:"+ calendar.get(Calendar.YEAR));
System.out.println("月:"+calendar.get(Calendar.MARCH));
System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:"+calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟:"+ calendar.get(Calendar.MINUTE));
System.out.println("秒:"+ calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MARCH)+"-"+calendar.get(Calendar.DAY_OF_MONTH)
+ "\t" +calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE)+ ":"+calendar.get(Calendar.SECOND));
}
}
第三代日期类
由于前面再代日期类的不足分析:
JDK 1.0 中包含了一个java.util.Date 类,但是它的大多数方法已经在JDK1.1 引入 Calendar 类之后被弃用了。而Calendar 存在问题是:
- 可变性:像日期和时间这样的类应该是不可变的
- 偏移性:
Date 中的年份是从 1900 开始的,而月份都是从0开始 - 格式化:格式化只对
Date 有用,Calendar 则不行 - 此外,它们也不是线程安全的,不能处理闰秒问题【每隔2天,多出
1s 】
第三代日期类:有三个LocalDate 【年月日】LocalTime 【时分秒】 LocalDateTime 【年月日时分秒】是在JDK8 引入的
注意的是:第三代日期类的【LocalDate 和 LocalTime 和 LocalDateTime 这三个类的构造器都是私有的,不能通过 new 进行实例化,要通过类名.now 获取对象实例】
LocalDate 只包含日期,可以获取日期字段
LocalTime 只包含时间,可以获取时间字段
LocalDateTime 包含日期+时间 ,可以获取日期和时间字段
package wrapper_.date_;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
public class LocalDateTime_ {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
int year = dateTime.getYear();
System.out.println("年="+year);
Month month = dateTime.getMonth();
System.out.println("月="+month);
int monthValue = dateTime.getMonthValue();
System.out.println("月="+monthValue);
int dayOfMonth = dateTime.getDayOfMonth();
System.out.println("日="+dayOfMonth);
int hour = dateTime.getHour();
System.out.println("时="+hour);
int minute = dateTime.getMinute();
System.out.println("分="+minute);
int second = dateTime.getSecond();
System.out.println("秒="+second);
}
}
DateTimeFormat 格式日期类
类似于SImpleDateFormat 类
DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式); 【注意不能直接new 实例化,因为构造器是默修饰的,要使用静态方法ofPattern 方法进行指定格式】
String str = dtf.format(日期对象);
案例演示:
package wrapper_.date_;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatter01 {
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String date = dtf.format(ldt);
System.out.println(date);
}
}
Instant 时间戳 【构造器是私有化,只能通过Instant.now() 方法获取Instant 对象】
类似于Date 提供了一系列和Date 转换的方式
Instant --> Date
Date date = Date.from(instant);
Date ---> Instant
Instant instant = date.toInstant();
案例演示:
Instant now = Instant.now();
System.out.println(now);
Date date = Date.from(now);
Instant instant = date.toInstant();
public static void main(String[] args) {
Instant instant = Instant.now();
Date date = new Date();
Date from = Date.from(instant);
Instant toInstant = date.toInstant();
}
第三代日期类更多方法
LocalDateTime 类
MonthDay :检查重复事件
是否是闰年
增加日期的某个部分
使用plus 方法测试增加时间的某个部分
使用minus 方法测试查看一年前和一年后的日期
package wrapper_.date_;
import javax.swing.text.DateFormatter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalTimeFormatter02 {
public static void main(String[] args) {
DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime time1 = dateTime.plusDays(168);
System.out.println("168天后的日期="+ofPattern.format(time1));
LocalDateTime dateTime1 = dateTime.minusMinutes(168);
System.out.println("减去 168 分钟的时间"+ofPattern.format( dateTime1));
}
}
常用类作业
1.编程题
1.将字符串中指定部分进行反转。比如将"abcdf"反转为"aedcbf"
2.编写方法 public static String reverse(String str,int start,int end)搞定
package wrapper_.execrise;
public class HomeWork01 {
public static void main(String[] args) {
String str = "abcdef";
String reverse = reverse(str, 1, 4);
System.out.println(reverse);
}
public static String reverse(String str,int start,int end){
if (str!=null && start<end && end < str.length())
throw new RuntimeException("传入的参数不正确!");
char[] chars = str.toCharArray();
char temp =' ';
for (int i = start, j= end; i < j; i++,j--) {
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
return new String(chars);
}
}
2.编程题
自己写的代码:
package wrapper_.execrise;
import java.util.Scanner;
public class HomeWork02 {
public static void main(String[] args) {
userName();
}
public static Scanner input(){
Scanner sc = new Scanner(System.in);
return sc;
}
public static void userName() {
System.out.println("请输入用户名:");
String s = input().nextLine();
System.out.println(s.length());
if (s.length() != 2 && s.length()!=3 && s.length()!=4){
throw new RuntimeException("您输入用户名有误");
}
userPassword();
}
public static void userPassword(){
System.out.println("请输入密码:");
String s = input().nextLine();
if (s.length()!=6)
throw new NumberFormatException("密码长度不正确");
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (!Character.isDigit(chars[i]))
throw new NumberFormatException("密码应全是数字");
}
userEmail();
}
public static void userEmail(){
System.out.println("请输入邮箱:");
String s = input().nextLine();
int i = s.indexOf("@");
if (i == -1)
throw new RuntimeException("邮箱应包含“@”符号");
if (s.indexOf(".") == s.indexOf(i-1))
throw new RuntimeException("邮箱应“.”应该在“@”符号前");
System.out.println("注册成功!");
}
}
老师写代码:
package com.hspedu.homework;
public class Homework02 {
public static void main(String[] args) {
String name = "abc";
String pwd = "123456";
String email = "ti@i@sohu.com";
try {
userRegister(name,pwd,email);
System.out.println("恭喜你,注册成功~");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void userRegister(String name, String pwd, String email) {
if(!(name != null && pwd != null && email != null)) {
throw new RuntimeException("参数不能为null");
}
int userLength = name.length();
if (!(userLength >= 2 && userLength <= 4)) {
throw new RuntimeException("用户名长度为2或3或4");
}
if (!(pwd.length() == 6 && isDigital(pwd))) {
throw new RuntimeException("密码的长度为6,要求全是数字");
}
int i = email.indexOf('@');
int j = email.indexOf('.');
if (!(i > 0 && j > i)) {
throw new RuntimeException("邮箱中包含@和. 并且@在.的前面");
}
}
public static boolean isDigital(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
}
3.编程题
package com.hspedu.homework;
public class Homework03 {
public static void main(String[] args) {
String name = "Willian Jefferson Clinton";
printName(name);
}
public static void printName(String str) {
if(str == null) {
System.out.println("str 不能为空");
return;
}
String[] names = str.split(" ");
if(names.length != 3) {
System.out.println("输入的字符串格式不对");
return;
}
String format = String.format("%s,%s .%c", names[2], names[0], names[1].toUpperCase().charAt(0));
System.out.println(format);
}
}
4.编程题
5.分析题
|