JAVA基础|常用API-JDK8之前传统的日期,时间

一. Date


(一)说明

代表的是日期和时间

(二)常用的用法

构造器说明
public Date()创建一个Date对象,代表的是系统当前此刻日期时间
public Date(long time)把时间毫秒值转换成Date日期对象
常见方法说明
public long getTime()返回从1970年1月1日 00:00:00走到此刻的总的毫秒数
public void setTime(long time)设置日期对象的时间为当前时间毫秒值对应的时间

(三). 使用

1. 创建一个Date对象,代表系统当前的时间信息

public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);
    }
}

2. 将毫秒值转换为日期

方法一:把时间毫秒转换成日期对象
//方法一:把时间毫秒转换成日期对象
Date d = new Date();
long time = d.getTime();
time += 2000;
Date d2 = new Date(time);
System.out.println(d2);
方法二:直接把日期对象的时间通过setTime方法进行修改 
//方法二:直接把日期对象的时间通过setTime方法进行修改
Date d = new Date();
long time = d.getTime();
time += 2000;
Date d3 = new Date();
d3.setTime(time);


二. SimpleDateFormat

(一)说明

代表简单日期格式化,可以用来把日期对象,时间毫秒值格式化成我们想要的形式。

(二)常用的方法

常见构造器说明
public SimpleDateFormat(String pattern)创建简单日期格式化对象,并封装时间的格式
格式化时间的方法说明
public final String format(Date date)将日期格式化成日期/时间字符串
public final String format(Object time)将时间毫秒值格式化成日期/时间字符串
解析方法说明
public Date parse(String source)把字符串时间解析成日期对象

(三)规范

代码说明
G年代标志符
y
M
d
h时 在上午或下午 (1~12)
H时 在一天中 (0~23)
m
s
S毫秒
EEE星期几
D一年中的第几天
F一月中第几个星期几
w一年中第几个星期
W一月中第几个星期
a上午 / 下午 标记符
k时 在一天中 (1~24)
K时 在上午或下午 (0~11)
z时区

示例:

yyyy年MM月dd日 HH时mm分ss秒
yy/MM/dd HH:mm
yyyy-MM-dd HH:mm:ss
yyyy年MM月dd日 HH时mm分ss秒 E
一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区

(四)使用

1. 将某个时间转换为特定的格式

public class Main {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);

        long time = d.getTime();
        System.out.println(time);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE a");
        System.out.println(sdf.format(d));
        System.out.println(sdf.format(time));
    }
}

在上面的例子中,format()即可以将Date类型的时间改为特定格式输出,也可以将毫秒值改为特定时间输出

2. SimpleDateFormat解析字符串时间成为日期对象

比如将2022-12-12 12:30:30这个字符串时间转换成 Date日期对象

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test2 {
    public static void main(String[] args) throws ParseException {
        String dateStr = "2022-12-12 12:12:11";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d2 = sdf.parse(dateStr);
        System.out.println(d2);
    }
}

在这里要注意的一点是,我们在创建SimpleDateFormat对象时,这个格式一定要和我们被解析的字符串的格式是一样的。

 

三. 练习(Date与SimpleDateFormat)

目标:通过例子进行练习,更好的掌握上述时间API的用法

名称:秒杀活动

需求:

已知秒杀开始时间:2023年11月11日 0:0:0

       秒杀结束时间:2023年11月11日 0:10:0

  • 小关下单并付款的时间为:2023年11月11日 0:01:18
  • 小王下单并付款的时间为:2023年11月11日 0:10:51
  • 请用代码说明这两位同学有没有参加以上秒杀活动?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws ParseException {
        //把时间拿出来
        String start = "2023年11月11日 0:0:0";
        String end = "2023年11月11日 0:10:0";
        String xg = "2023年11月11日 0:01:18";
        String xw = "2023年11月11日 0:10:57";

        //把字符串的时间解析成日期对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date startDt = sdf.parse(start);
        Date endDt = sdf.parse(end);
        Date xgDt = sdf.parse(xg);
        Date xwDt = sdf.parse(xw);

        //开始判断小关和小王是否秒杀成功了
        //获取Date对象的毫秒值
        long startTime = startDt.getTime();
        long endTime = endDt.getTime();
        long xgTime = xgDt.getTime();
        long xwTime = xwDt.getTime();

        //判断
        if (xgTime >= startTime && xgTime <= endTime) {
            System.out.println("小关秒杀成功");
        } else {
            System.out.println("小关秒杀失败");
        }

        if (xwTime >= startTime && xwTime <= endTime) {
            System.out.println("小王秒杀成功");
        } else {
            System.out.println("小王秒杀失败");
        }
    }
}

大致思路就是:

  1. 将字符串的时间转换成Date对象
  2. 通过Date类的getTime方法获取各自时间的毫秒值
  3. 通过毫秒值来判断

四. Calendar

(一)为什么要学习Calendar

例如,如果我们有这样一个需求:将2023年09年10日增加一个月。那么我们以传统的方法就需要以下的步骤:

  1. 定义字符串记住:2023年09年10日
  2. 将字符串时间解析成Date日期对象
  3. 通过日期对象获取毫秒值
  4. 增加一个月的毫秒值:1000*60*60*24*30
  5. 再格式化毫秒值得到结果

这样的步骤十分繁琐,那我们可以通过Canlendar来简化这一步骤

(二)说明

  • 代表的是系统此刻时间对应的日历
  • 通过它可以单独获取,修改时间中的年,月,日,时,分,秒等

(三)常用的方法

方法名说明
public static Calendar getInstance()获取当前日历对象
public int get(int field)获取日历中的某个信息
public final Date getTime()获取日期对象
public long getTimeInMillis()获取时间毫秒值
public void set(int filed,int value)修改日历中的某个信息
public void add(int filed,int amount)为某个信息增加/减少指定的值

(四)使用

注意:Calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。

1. 获取当前时间

public class Test {
    public static void main(String[] args) {
        Calendar now = Calendar.getInstance();
        System.out.println(now);
    }
}

java.util.GregorianCalendar[time=1714620723281,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2024,MONTH=4,WEEK_OF_YEAR=18,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=123,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=32,SECOND=3,MILLISECOND=281,ZONE_OFFSET=28800000,DST_OFFSET=0]
 

然后她就会返回我当前系统中的时间信息

注意:月份是从0开始记录的!

2. 获取日历中的某个信息

例如,获取年份:

int year = now.get(Calendar.YEAR);

获取在当年中的第几天

int Days = now.get(Calendar.DAY_OF_YEAR);

 

3. 拿到日历中记录的日期对象

Date d = now.getTime();

4. 拿到时间毫秒值

long time = now.getTimeInMillis();

5. 修改日期中的某个信息

now.set(Calendar.MONTH,9);

注意:月份是从0开始记录的!这里是将月份改为了10月,而非9月。

你也可以通过修改DAY_OF_YEAR来变相修改月份

例如将DAY_OF_YEAR修改为125,即修改成了今天是今年的第125天

6. 为某个信息增加或者减少多少

now.add(Calendar.DAY_OF_YEAR,100);    //增加
now.add(Calendar.DAY_OF_YEAR,-100);    //减少

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/592151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法提高之潜水员

算法提高之潜水员 核心思想&#xff1a;二维01背包 两个容量v1v2注意状态计算时j和p可以<各自的v #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1010,M 80,K 22;int f[K][M];int k,V1,V2;int main(){ci…

FloodFill-----洪水灌溉算法(DFS例题详解)

目录 一.图像渲染&#xff1a; 代码详解&#xff1a; 二.岛屿数量&#xff1a; 代码详解&#xff1a; 三.岛屿的最大面积&#xff1a; 代码详解&#xff1a; 四.被围绕的区域&#xff1a; 代码详解&#xff1a; 五.太平洋大西洋水流问题&#xff1a; 代码详解&#x…

锂电池充放电方式曲线

作为一种“化学能-电能”相互转换的能量装置&#xff0c;锂电池在使用过程中必然会进行充电和放电&#xff0c;合理的充放电方式既能减轻锂电池的损伤程度&#xff0c;又能充分发挥锂电池的性能&#xff0c;具有重要的应用价值。 如《GB/T 31484-2015&#xff1a;电动汽车用动…

非对称齿轮的跨棒距算的对不对

前面有一期咱们聊了非对称齿轮《》&#xff0c;非对称齿轮的齿厚测量一般都为跨棒距。最近研究了下计算方法&#xff0c;对计算结果的正确性做了下验证。 在MATLAB中编制了相关的计算程序&#xff1a; 齿轮的模数4&#xff0c;左侧分度圆压力角25&#xff0c;右侧分度圆压力角…

Sqli-labs第一关到第四关

目录 一&#xff0c;了解PHP源代码 二&#xff0c;破解第一关 2.1在了解完源码之后&#xff0c;我们重点看一下 2.2破解这道题表中有几列 2.3查看表中哪一列有回显 2.4查询库&#xff0c;表&#xff0c;列信息 三&#xff0c;总结 前提&#xff1a; 之所以把1234关…

MySQL基础_1.MySQL概述

文章目录 一、关系型数据库和非关系型数据库1.1 关系型&#xff08;RDBMS&#xff09;1.2 非关系型&#xff08;非RDBMS&#xff09; 二、常用的基础语句2.1 查看表的创建信息2.2 编码问题 一、关系型数据库和非关系型数据库 1.1 关系型&#xff08;RDBMS&#xff09; 是最古…

都上3D数字孪生了,2D的WEB组态和大屏可视化未来的发展在哪里?趋势是基于页面嵌套、蓝图连线等新技术,与功能业务应用融合

首先回顾下组态工具的发展史&#xff1a; 回顾发展史&#xff0c;WEB组态终于可以搭建业务系统了&#xff01;&#xff08;页面嵌套 节点编辑 WEB组态 上位机 大屏可视化 无代码 0代码 iframe nodered 蓝图&#xff09;-CSDN博客文章浏览阅读624次&#xff0c;点赞12次&#x…

ThreeJS:纹理的颜色空间

色彩空间Color Space 在ThreeJS中&#xff0c;纹理的colorSpace属性用于定义文里的颜色空间。 颜色空间是一个用于描述颜色的数学模型&#xff0c;在现实生活中&#xff0c;人眼可以观察到无数种颜色&#xff0c;而颜色空间就是用来描述这些颜色的一个方法&#xff0c;不同的颜…

C语言-自定义类型:结构体,枚举,联合

目录 一、结构体1.1 结构体变量的定义和初始化1.2 结构体内存对齐1.3 修改默认对齐数1.4 结构体传参 二、位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段的应用 三、枚举3.1 枚举类型的定义3.2 枚举的优点 四、联合&#xff08;共用体&#xff09;4.1 联合…

c#数据库: 9.删除和添加新字段/数据更新

先把原来数据表的sexy字段删除,然后重新在添加字段sexy,如果添加成功,sexy列的随机内容会更新.原数据表如下: using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.…

Linux理解文件操作 文件描述符fd 理解重定向 dup2 缓冲区 C语言实现自己的shell

文章目录 前言一、文件相关概念与操作1.1 open()1.2 close()1.3 write()1.4 read()1.4 写入的时候先清空文件内容再写入1.5 追加&#xff08;a && a&#xff09; 二、文件描述符2.1 文件描述符 fd 0 1 2 的理解2.2 FILE结构体&#xff1a;的源代码 三、深入理解文件描述…

jupyter notebook 设置密码报错ModuleNotFoundError: No module named ‘notebook.auth‘

jupyter notebook 设置密码报错ModuleNotFoundError: No module named ‘notebook.auth‘ 原因是notebook新版本没有notebook.auth 直接输入以下命令即可设置密码 jupyter notebook password

k8s调度原理以及自定义调度器

kube-scheduler 是 kubernetes 的核心组件之一&#xff0c;主要负责整个集群资源的调度功能&#xff0c;根据特定的调度算法和策略&#xff0c;将 Pod 调度到最优的工作节点上面去&#xff0c;从而更加合理、更加充分的利用集群的资源&#xff0c;这也是我们选择使用 kubernete…

Linux---软硬链接

软链接 我们先学习一下怎样创建软链接文件&#xff0c;指令格式为&#xff1a;ln -s 被链接的文件 生成的链接文件名 我们可以这样记忆&#xff1a;ln是link的简称&#xff0c;s是soft的简称。 我们在下面的图片中就是给test文件生成了一个软链接mytest&#xff1a; 我们来解…

数据结构篇其四---栈:后进先出的魔法世界

前言 栈的学习难度非常简单&#xff0c;前提是如果你学过顺序表和单链表的话&#xff0c;我直接说我的观点了&#xff0c;栈就是有限制的顺序表和单链表。 栈只允许一端进行插入删除。栈去除了各种情况复杂的插入删除&#xff0c;只允许一端插入删除的特性&#xff0c;这一种数…

5月4(信息差)

&#x1f384; HDMI ARC国产双精度浮点dsp杜比数码7.1声道解码AC3/dts/AAC环绕声光纤、同轴、USB输入解码板KC33C &#x1f30d; 国铁集团回应高铁票价将上涨 https://finance.eastmoney.com/a/202405043066422773.html ✨ 源代码管理平台GitLab发布人工智能编程助手DuoCha…

【数据结构】您有一份KMP算法教学已到账,请注意查收!!!

KMP算法 导读一、KMP算法1.1 重要术语1.2 部分匹配值1.3 部分匹配值的作用 二、KMP算法原理2.1 从指针的角度理解KMP算法2.2 从匹配的角度理解KMP算法2.3 小结 三、KMP算法的实现3.1 next数组3.2 next数组的计算3.2.1 通过PM值计算next数组3.2.2 通过移位模拟计算next数组3.2.3…

Web Storage 笔记11 网页数据存储

相关内容&#xff1a;Web Storage基本概念、localStorage、sessionStorage、登录注销实例、…… 在制作网页时会希望记录一些信息&#xff0c;例如用户登录状态、计数器或者小游戏等&#xff0c;但是又不希望用到数据库&#xff0c;就可以利用WebStorage技术将数据存储在用户浏…

Kubelet containerd 管理命令 ctr常用操作

镜像常用操作 1. 拉取镜像 ctr images pull docker.io/library/nginx:alpine 指定平台 --all-platforms&#xff1a;所有平台&#xff08;amd64 、arm、386 、ppc64le 等&#xff09;&#xff0c;不加的话下载当前平台架构 --platform&#xff1a;指定linux/amd64平台 ctr …

鸿蒙开发仿咸鱼TabBar

鸿蒙开发自定义TabBar&#xff0c;实现tabBar 上中间按钮凸起效果 第一步、定义数据模型 export default class TabItemData{defaultIcon: ResourceselectedIcon: Resourcetitle: stringisMiddle: booleanconstructor(defaultIcon:Resource, selectedIcon:Resource, title:st…