Java学习 时间类和包装类
2023-12-13 04:29:14
目录
JDK7-时间
时间的相关知识
地球围着太阳转一圈是一年,地球自转一圈是一天.在同一条经线上的时间是一样的.地球公转速度不均匀 所以不用格林威治时间了.因为有误差
?
?Data时间类
Data是一个JDK写好的Javabean类,用来描述时间,精确到毫秒.
利用空参构造创建的对象,默认表示系统当前时间.
利用有有参构造的对象,表示指定的时间
public static void main(String[] args) {
/*
* public Date() 创建Date对象 表示当前时间
* public Date(long date) 创建Date对象,表示指定时间
*
* public void setTime(long time) //设置/修改毫秒值
* public long getTime() //获取时间对象的毫秒值
* */
//1.创建对象表示一个时间
Date d =new Date();
System.out.println(d);
//2.创建对象表示一个指定的时间
Date d2 =new Date(0L);//过了时间原点 0毫秒的时间 1970 8点
System.out.println(d2);
//3.setTime 修改时间
//1000毫秒=1秒
d2.setTime(1000L);
System.out.println(d2);
//4.getTime获取当前时间的毫秒值
long time = d2.getTime();
System.out.println(time);
import java.util.Date;
import java.util.Random;
public class day11 {
public static void main(String[] args) {
extracted();
//需求二:
Random r =new Random();
//创建两个时间对象
Date d1 =new Date(Math.abs(r.nextInt()));
Date d2 =new Date(Math.abs(r.nextInt()));
System.out.println(d1);
System.out.println(d2);
long time1=d1.getTime();
long time2=d2.getTime();
if(time1>time2){
System.out.println("第一个时间在后面,第二个时间在前面");
}else if(time1 <time2){
System.out.println("第一个时间在前面,第二个时间在后面");
}else{
System.out.println("表示时间一样");
}
}
private static void extracted() {
//需求一:
//1.创建一个对象,表示时间原点
Date d1=new Date(0L);
//2.获取d1时间的毫秒值
long time =d1.getTime();
//3.在这个时间的基础上加上一年的毫秒值
time = time +1000L*60*60*24*365;
//4.把计算之后的时间毫秒值,再设置回d1当中
d1.setTime(time);
//5.打印d1
System.out.println(d1);
}
}
?
SimpleDateFormat类
?
?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class day11 {
public static void main(String[] args) throws ParseException {
//method();
//1.定义一个字符串来表示时间
String str ="2023-11-11 11:11:11";
//2.利用空参构造创建SimpleDateFormat对象
//细节:
//创建对象的格式要跟字符串的格式完全一致
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
//3.打印结果
System.out.println(date);
System.out.println(date.getTime());
}
private static void method() {
//1.利用空参构造创建SimpleDateFormat对象,默认格式
SimpleDateFormat sdf =new SimpleDateFormat();
Date d =new Date(0L);
String str = sdf.format(d);
System.out.println(str);//1970/1/1 08:00 (默认格式)
//2.如果想指定格式:要用带参构造
//利用带参构造创建SimpleDateFormat对象,指定格式
SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
Date d1 =new Date(0L);
String str1 = sdf2.format(d1);
System.out.println(str1);//1970年01月01日 08:00:00 周四
//课堂练习:yyyy年MM月dd日 HH:mm:ss 星期E
}
}
?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class day11 {
public static void main(String[] args) throws ParseException {
//1.可以通过2000-11-11进行解析,解析成一个Date对象
String s ="2000-11-11";
//2.解析
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf1.parse(s);
//3.格式化
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");
String result = sdf2.format(date);
System.out.println(result);
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class day11 {
public static void main(String[] args) throws ParseException {
//1.比较两个时间
//解析时间 得到毫秒值
String startStr ="2023年11月11日 0:0:0";
String endtStr ="2023年11月11日 0:10:0";
String orderStr ="2023年11月11日 0:01:00";
//2.解析:
SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date startDate = sdf.parse(startStr);
Date endDate = sdf.parse(endtStr);
Date orderDate = sdf.parse(orderStr);
//3.得到三个时间的毫秒值
long startTime =startDate.getTime();
long endTime =endDate.getTime();
long orderTime =orderDate.getTime();
//判断
if(orderTime>=startTime&&orderTime<=endTime){
System.out.println("秒杀成功");
}else{
System.out.println("秒杀失败了");
}
}
}
Calendar类
?
?
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
public class day11 {
public static void main(String[] args) throws ParseException {
//1.获取日历对象
//细节1:Calendar是一个抽象类 不能直接new,而是通过一个静态方法获得到子类对象
//底层原理:
//会根据系统的不同时区来获取不同的日历对象,默认当前时间
//会把时间中的纪元,年,月,日,分,秒,星期,等等的都放到一个数组当中
// 0:纪元
// 1:年
// 2:月
// 3:一年中的第几周
// 4:一个月中的第几周
// 5:一个月中的第几天
//... 16
//细节2:
//月份:范围0~11 如果获取出来的是0 那么实际上是1
//星期:在老外的眼里,星期日是一周中的第一天
// 1(星期天) 2(星期一) ...
Calendar c = Calendar.getInstance();
System.out.println(c);
//2.修改一下日历代表的时间
Date d =new Date(0L);//计算机时间原点
c.setTime(d);
System.out.println(c);
//java在calendar类中,把索引对应的数字都定义成了常量
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(year+", "+month+", "+date+", "+getweek(week)); //1970 1 1 星期四
c.set(Calendar.YEAR,2000);
c.set(Calendar.MONTH,11);//12月的意思 如果你写12-->13月 也就是往前进位一年
c.add(Calendar.MONTH,1);//整数往后加 负数往后减
}
//查表法
//表:容器
//让数据跟索引产生对应关系
//传入对应的数字1-7
//返回对应的星期几
public static String getweek(int index){
//定义一个数组 让汉字星期几 跟1-7产生对应关系
String[] arr={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
//根据索引返回对应的星期
return arr[index];
}
}
JDK8新增时间相关类
Zoneld时区 下面能够看得懂就可以了?
import java.text.ParseException;
import java.time.ZoneId;
import java.util.Set;
public class day11 {
public static void main(String[] args) throws ParseException {
//1.获取所有的时区名称
Set<String> zoneId = ZoneId.getAvailableZoneIds();
System.out.println(zoneId);
System.out.println(zoneId.size());
//2.获取当前系统的默认时区
ZoneId zoneId1 = ZoneId.systemDefault();
System.out.println(zoneId1);//Asia/Shanghai
//3.获取指定的时区
ZoneId zoneId2 = ZoneId.of("Asia/Shanghai");
System.out.println(zoneId2);
}
}
?
?
?
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class day11 {
public static void main(String[] args) {
//1.获取当前时间的Instant对象(标准时间)
Instant now =Instant.now();
System.out.println(now);//世界标准时间
//2.根据(秒/毫秒/纳秒)获取Instant对象
Instant instant1 = Instant.ofEpochMilli(0L);
System.out.println(instant1);//1970-01-01T00:00:00Z
Instant instant2 = Instant.ofEpochSecond(1L);
System.out.println(instant2);
Instant instant3 = Instant.ofEpochSecond(1L, 10000000000L);//第二个参数微秒
System.out.println(instant3);
//指定时区
//静态的方法用类名调用 非静态的方法要创建对象用对象调用
ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(time);
//2023-12-05T18:39:04.437016700+08:00[Asia/Shanghai]
Instant instant4 = Instant.ofEpochMilli(0L);
Instant instant5 = Instant.ofEpochMilli(1000L);
//isbefore:判断调用者代表的时间是否在参数表示时间的后面
boolean result1=instant4.isBefore(instant5);
System.out.println(result1);//true
//minusxxx
}
}
?
?
?
?包装类
valueof底层-128-127的数据不会new 超出就会new一个新的
?JDK5以前加法:
?
public class day11 {
public static void main(String[] args) {
//1.把整数转成二进制 八进制 十六进制
String str1=Integer.toBinaryString(100);
System.out.println(str1);
String str2 = Integer.toOctalString(100);
System.out.println(str2);
String str3 = Integer.toHexString(100);
System.out.println(str3);
int i = Integer.parseInt("123");
System.out.println(i);
System.out.println(i+1);
//细节1:
//在类型转换的时候 括号中的参数只能是数字不能是其他 否则代码会报错
//细节2:
//8种包装类当中,除了Character都有对应的parseXXX的方法,进行类型转换
String str ="true";
Boolean.parseBoolean(str);
System.out.println(b);
}
}
import java.util.Scanner;
public class day11 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入一个整数:");
//int i=sc.nextInt();
// String str =sc.next();
// //不能接收空格
String line = sc.nextLine();
System.out.println(line);
//以后键盘录入 不管什么类型 统一使用nextLine
int i=Integer.parseInt(line);
double v = Double.parseDouble();
System.out.println(v);
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class day11 {
public static void main(String[] args) {
//1.创建一个集合来添加整数 基本数据类型用包装类
ArrayList<Integer>list=new ArrayList<>();
Scanner sc =new Scanner(System.in);
while(true){
System.out.println("请输入一个整数");
String numStr=sc.nextLine();
int num = Integer.parseInt(numStr);
if(num>100||num<1){
System.out.println("当前数字不在1~100的范围当中,请重新输入");
continue;
}
//添加到集合中
//细节:
//num:基本数据类型
//集合里面的数据是Integer
//在添加数据的时候触发了自动装箱
//list.add(num);
//list.add(Integer.valueOf(num));
list.add(num);
//统计集合中所有的数据和
int sum = getSum(list);
//对sum进行判断
if(sum>200){
System.out.println("集合中所有的数据和已经满足要求");
break;
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)+" ");
}
}
private static int getSum(ArrayList<Integer> list) {
int sum =0;
for (int i = 0; i < list.size(); i++) {
int num =list.get(i);
sum+=num;
}
return sum;
}
}
public class day11 {
public static void main(String[] args) {
String str ="123456789";
//正则
if(!str.matches("[1-9]\\d{0,9}")){
System.out.println("该数据不符合题目要求,请重新输入");
return;
}else{
System.out.println("该数据符合要求");
}
int res=0;
for(int i=0;i<str.length();i++){
int num =str.charAt(i)-'0';
res+=num;
res=res*10+num;
}
System.out.println(res);
System.out.println(res+1);
}
}
public class day11 {
public static void main(String[] args) {
String str = toBinaryString(6);
System.out.println(str);
}
public static String toBinaryString(int num){
StringBuilder SB = new StringBuilder();
while(true){
if(num==0){
break;
}
int remainder=num%2;
num=num/2;
SB.insert(0,remainder);
}
return SB.toString();
}
}
?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
public class day11 {
public static void main(String[] args) throws ParseException {
//JDK7
//规则:只要对时间进行计算或者判断,都需要先获取当前时间的毫秒值
//1.计算出生年月日
String Birthday ="2000年1月1日";
SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日");
Date date =sdf.parse(Birthday);
long birthday =date.getTime();
//2.获取当前时间
long todayTime = System.currentTimeMillis();
//3.计算间隔了多少天
long time= todayTime - birthday;
System.out.println(time/1000/60/60/24);
//JDK8
LocalDateTime ld1= LocalDate.of(2000,1,1).atStartOfDay();
LocalDate ld2 = LocalDate.now();
long days = ChronoUnit.DAYS.between(ld1, ld2);
System.out.println(days);
}
}
import java.time.LocalDate;
public class day11 {
public static void main(String[] args) {
// //JDk7
// //Calendar 2000年3月1日//再把日历减一天 看看是28 还是29号
// Calendar c = Calendar.getInstance();
// c.set(2000,2,1);
// //再把日历往前减一天
// c.add(Calendar.DAY_OF_MONTH,-1);
// int day =c.get(Calendar.DAY_OF_MONTH);
// System.out.println(day);
// //也可以2001年1月1日 往前减一天 统计这一天是一年中的第几天 366
//JDK8
//设定时间为2000 3 1
LocalDate ld1 = LocalDate.of(2000, 3, 1);
LocalDate ld2= ld1.minusDays(1);
int day2 = ld2.getDayOfMonth();
System.out.println(day2);
System.out.println(ld1.isLeapYear());//true:闰年
}
}
文章来源:https://blog.csdn.net/2301_79602614/article/details/134804514
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!