Date/SimpleDateFormat

news2024/9/24 15:16:13

Date

在Java中,java.util.Date 类用于表示日期和时间。它以自1970年1月1日00:00:00 GMT 一来的毫秒数来存储日期和时间信息。

1、构造方法

标准基准时间(称为“历元(epoch)”:即1970年1月1日00:00:00 GMT。

tips: 由于中国处于东八区,所以中国的标准基准时间为08:00。

构造方法说明
Date()创建Date对象,初始化时间为从运行程序的此时此刻到时间原点经历的毫秒值
Date(long millisec)创建Date对象,初始化时间为传递的毫秒值

代码演示: 

import java.util.Date;

public class Demo01Date {
    public static void main(String[] args) {
        // 创建日期对象,系统当前的时间
        System.out.println(new Date()); 
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); 
    }
}

2、常用方法

类型方法名说明
longsetTime(long time)修改当前对象的时间
longgetTime()返回自1970年1月1日00:00:00 GMT以来的毫秒数
public StringtoString()将日期转换为字符串表示,形如Thu Jan 01 08:00:00 CST 1970

 代码演示:

public class DateDemo1 {
    public static void main(String[] args) {

        //在创建对象的时候也可以指定时间
        Date date1 = new Date(0L);
        long time = 0;
        time += 1000L * 60 * 60 * 24 *365;
        date1.setTime(time);
        System.out.println(date1);
    }
}

如果要计算和比较时间的话,都需要转换为毫秒值才可以。 

SimpleDateFormat

SimpleDateFormat是日期/时间格式化类,可以实现在Date对象与String对象之间进行来回转换,主要是指定时间的格式。

1、构造方法

构造方法说明
public SimpleDateFormat(String pattern)参数pattern是一个字符串,代表日期时间的自定义格式。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

常用的格式规则为:

标识字母(区分大小写)含义
y
M
d
H
m
s

 

2、常用方法

类型方法名说明
public Stringformat(Date date)将Date对象转换为指定格式的字符串
public Dateparse(String source)将字符串解析为Date对象

需求:
            秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)
            秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)

            小贾下单并付款的时间为:2023年11月11日 0:01:0
            小皮下单并付款的时间为:2023年11月11日 0:11:0
            用代码说明这两位同学有没有参加上秒杀活动?

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

public class SimpleDateFormatDemo2_case2 {
    public static void main(String[] args) throws ParseException {
        String startstr = "2023年11月11日 0:0:0";
        String endstr = "2023年11月11日 0:10:0";
        String order1str = "2023年11月11日 0:01:0";
        String order2str = "2023年11月11日 0:11:0";
        //以指定格式创建一个SimpleDateFormat对象
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //将字符串解析为Date对象,并获取毫秒值
        long starttime = simpleDateFormat1.parse(startstr).getTime();
        long endtime = simpleDateFormat1.parse(endstr).getTime();
        long order1time = simpleDateFormat1.parse(order1str).getTime();
        long order2time = simpleDateFormat1.parse(order2str).getTime();

        if ((order1time > starttime) && (order1time < endtime)) {
            System.out.println("小贾参加秒杀活动");
        } else {
            System.out.println("小贾没有参加秒杀活动");
        }
        if ((order2time > starttime) && (order2time < endtime)) {
            System.out.println("小皮参加秒杀活动");
        } else {
            System.out.println("小皮没有参加秒杀活动");
        }
    }
}

Calendar

Calendar代表了与日历有关的类,可单独获取或者修改日历中的年月日。

Calebdar是一个抽象类,不能直接创建对象,可通过静态方法getInstance方法获取其子类的对象。

    Calendar calendar = Calendar.getInstance();

常用方法

类型方法说明
public staticCalendar getInstance()获取一个它的子类GregorianCalendar对象。
public intget(int filed)获取日历中某个字段的信息,返回值是数字
public voidset(int field, int value)修饰某个字段的信息
public voidadd(int field, int amount)将某个字段的值减少amount

field参数与字段的对应规则:

Calendar.YEAR
Calendar.MONTH
Calendar.DAY_OF_MONTH
Calendar.HOUR小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期

 好像没看到获取指定时间的日历对象。

日历类中月份的范围为0~11,例如当值为0时表示的是一年中的第一个月,即一月份。

日历类中星期的特点:范围为1~7,星期日是一周中的第一天,例如当返回7时表示的是星期六。

    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }

LocalDate / LocalTime / LocalDateTime

1、now/of

是使用类的静态方法,用来获取时间对象

以LocalDate类为例:

静态方法说明
static LocalDate now()获取表示当前日期的LocalDate对象。
static LocalDate of(int year, int month, int day)获取具有指定年、月、日的LocalDate对象。
  public void test1() {
        // now() 获取当前时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("localDate:" + localDate);
        System.out.println("localTime:" + localTime);
        System.out.println("localDateTime:" + localDateTime);
        // of 根据指定年月日时分秒创建指定的时间
        LocalDate customDate = LocalDate.of(2022, 5, 3);
        LocalTime customTime = LocalTime.of(21, 43, 0);
        LocalDateTime customDateTime = LocalDateTime.of(2022, 5, 3, 21, 43, 0);
        System.out.println("customDate:" + customDate);
        System.out.println("customTime:" + customTime);
        System.out.println("customDateTime:" + customDateTime);
    }

结果:

2、 getXxx

get系列方法获取日期和时间中的属性值。

其中LocalDate只描述日期,LocalTime描述时间,LocalDateTime描述日期和时间,在使用方法的时候要注意。

类型方法说明
intgetYear()
MonthgetMonth()
intgetDayOfMonth()
intgetHour()
intgetMinute()
intgetSecond()
DayOfWeekgetDayOfWeek()星期几
public void test2() {
        // 获取时间参数的年、月、日(
        System.out.println("获取时间参数的年、月、日:");
        LocalDateTime param = LocalDateTime.now();
        System.out.println("year:" + param.getYear());
        System.out.println("month:" + param.getMonth());
        System.out.println("day:" + param.getDayOfMonth());
        System.out.println("hour:" + param.getHour());
        System.out.println("minute:" + param.getMinute());
        System.out.println("second:" + param.getSecond() + "\n");
}

输出: 

 

3、isXxx

is开头的方法表示判断。

类型方法说明
booleanisAfter(LocalDate date)判断一个日期是否在另一个日期的后面
booleanisBefore(LocalDate date)判断一个日期是否在另一个日期的前面
booleanisEquals()判断两个日期是否相同
public class test3 {
    public static void main(String[] args) {
        //获取当前对象
        LocalDate time1 = LocalDate.now();
        System.out.println(time1);    //2024-07-13
        //获取指定时间对象
        LocalDate time2 = LocalDate.of(2024, 12, 26);
        System.out.println(time2);      //2024-12-26

        //比较两个LocalDate
        boolean after = time1.isAfter(time2);     //false
        System.out.println(after);
        boolean before = time1.isBefore(time2);       //true
        System.out.println(before);

    }
}

输出: 

 

4、plus/minus

增加减少时间

细节:JDK8新增的时间对象都是不可变的,如果我们修改了时间,那么调用者不会改变,而是产生一个新的时间对象。

public class test4 {
    public static void main(String[] args) {
        //增加时间量的方法 plusXXX系类的方法 返回的是一个新的日期对象
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now.getYear());
        //可以给当前的日期增加时间量
        LocalDateTime newDate= now.plusYears(1);
        int year = newDate.getYear();
        System.out.println(year);

        System.out.println("================================");
        //减去时间量的方法minusXXX 系列的方法 返回的是一个新的日期对象
        LocalDate now1 = LocalDate.now();
        System.out.println(now1.getDayOfMonth());
        LocalDate newDate2 = now1.minusDays(10);
        int dayOfMonth = newDate2.getDayOfMonth();
        System.out.println(dayOfMonth);
    }
}

输出:

 

5、with

修改时间

public class test5 {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println("today:" + now);
        // 修改日期为本月的某天
        LocalDateTime newDate = now.withYear(2025);
        System.out.println("newDate:" + newDate);
    }
}

输出:

 

ZoneId

常用方法

类型方法说明
static Set<string>getAvailableZoneIds()获取所有时区
static ZoneIdsystemDefault()获取系统默认时区
static Zoneldof(string zoneld)获取一个指定时区

Instant

用于表示时间戳的类。时间戳是距离1970年1月1日UTC时间的秒数或纳秒数。

  • Instant类提供了一组方法,用于处理和操作时间戳。它可以表示从1970年1月1日起的精确时间,以纳秒为单位。Instant类是不可变的,也就是说,一旦创建了一个Instant对象,就不能修改它的值。
  • 通过Instant类,可以获取当前的系统时间戳,也可以根据指定的时间戳值创建Instant对象。它还支持与其他日期和时间类的相互转换,可以将Instant对象转换为特定时区下的日期和时间,或者将特定时区下的日期和时间转换为Instant对象。

需要注意的是,Instant类是与计算机系统的时间概念相关的,它与时区无关,并以协调世界时(Coordinated Universal Time,UTC)为基准。

常用方法

静态方法:用于获取Instant对象。

静态方法    描述
static now()获取当前标准时间的Instant对象
static ofEpochMilli(long epochMilli) 根据指定的毫秒数获取Instant对象
static ofEpochSecond(long epochSecond)根据指定的秒数获取Instant对象
static ofEpochSecond(long epochSecond, long nanoAdjustment)根据指定的秒数和纳秒数获取Instant对象

实例方法:用于处理和操作时间戳。

类型方法说明
ZonedDateTimeatZone(ZoneId zone)将Instant对象转换为指定时区的ZonedDateTime对象
booleanisXxx(Instant otherInstant)判断当前Instant对象是否满足指定条件
InstantminusXxx(long millisToSubtract)从当前Instant对象减去指定的时间间隔
InstantplusXxx(long millisToAdd)在当前Instant对象上增加指定的时间间隔

ZoneDateTime 

ZonedDateTime类:带时区的时间。

常用方法

静态方法:用于获取ZonedDateTime对象。

实例方法:用于处理和操作时间。

类型方法说明
ZonedDateTimewithXxx(时间)修改年、月、日、时、分、秒等,并返回一个新的ZonedDateTime对象。
ZonedDateTimeminusXxx(时间)减少年、月、日、时、分、秒等,并返回一个新的ZonedDateTime对象。
ZonedDateTimeplusXxx(时间)增加年、月、日、时、分、秒等,并返回一个新的ZonedDateTime对象。

注意:上述"时间"指的是一定的时间量,可以是年、月、日、时、分、秒等。具体的时间量可根据具体方法而定,例如withYear(int year)修改年份,minusHours(long hours)减少小时数,plusMinutes(long minutes)增加分钟数等。

Duration

用于计算两个“时间”间隔的类。

静态方法 between():计算两个时间的间隔,默认是

Period

用于计算两个“日期”间隔的类。

静态方法 between():计算两个日期之间的间隔

 3. ChronoUnit类

ChronoUnit类是Java中的一个枚举类,用于表示日期和时间的不同单位。

DateTimeFormatter

解析和格式化日期或时间的类。

常用方法

类型方法说明
staticofPattern("yyyy-MM-dd")通过给定格式获取对象
public Stringformat()把一个日期对象的默认格式 格式化成指定的格式字符串
public class test6 {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        //必须得为1999-09-21,不能是1999-9-21
        LocalDate localDate = LocalDate.parse("2022-05-03", formatter);
        System.out.println("localDate:" + localDate);
        String format1 = formatter.format(LocalDate.now());
        System.out.println("format1:"+format1);
    }
}

输出:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4G LTE教程

整体架构 物理层&#xff08;第 1 层&#xff09; 物理层通过空中接口传输来自 MAC 传输信道的所有信息。负责 RRC 层的链路自适应 (AMC)、功率控制、小区搜索&#xff08;用于初始同步和切换目的&#xff09;和其他测量&#xff08;LTE 系统内部和系统之间&#xff09;。 介…

运行在Linux上的程序越来越慢的排查思路

1、通过free -h 排查内存使用情况&#xff0c;是否内存满了 2、通过df -h 排查磁盘的使用情况&#xff0c;磁盘是否没有空间了 3、检查系统资源配置情况&#xff0c;比如使用ulimit -a检查当前会话的资源限制&#xff0c;如最大文件数、打开文件描述符数等&#xff0c;看是否…

vue 前端项目调用后端接口记录

axios中不同的类型的请求附带数据使用的关键字 请求类型关键字示例GETparamsaxios({ method: get, url: example.com, params: { key: value } })POSTdataaxios({ method: post, url: example.com, data: { key: value } })PUTdataaxios({ method: put, url: example.com, dat…

快速读出linux 内核中全局变量

查问题时发现全局变量能读出来会提高效率&#xff0c;于是考虑从怎么读出内核态的全局变量&#xff0c;脚本如下 f open("/proc/kcore", rb) f.seek(4) # skip magic assert f.read(1) b\x02 # 64 位def read_number(bytes):return int.from_bytes(bytes, little,…

深度解读李彦宏的“不要卷模型,要卷应用”

深度解读李彦宏的“不要卷模型&#xff0c;要卷应用” —— AI技术的应用之道 引言 在2024世界人工智能大会的舞台上&#xff0c;李彦宏的“不要卷模型&#xff0c;要卷应用”言论犹如一石激起千层浪&#xff0c;引发了业界对AI技术发展路径的深思。本文将深入探讨这一观点&a…

修改vscode的字体为等宽字符

在文件——首选项——设置 中 搜索 Editor: Font Family 将内容改为下面的 Consolas, Courier New, monospace 之后重启Vscode就行了

vs2017/2019串口Qt Serial Port/modbus使用报错

vs2017/2019 Qt Serial Port/modbus配置 /* * 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QModbusTcpClient::QModbusTcpClient(class QObject *)" (__imp_??…

【代码随想录】【算法训练营】【第66天】 [卡码95]城市间货物运输II [卡码96]城市间货物运输III

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 66&#xff0c;周五&#xff0c;ding ding~ [卡码95] 城市间货物运输II 题目描述 卡码95 城市间货物运输II 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 …

智慧养殖的智慧网络:构建高效、可扩展的养殖生态

智慧养殖&#xff0c;在国家政策的大力扶持和农业数字化浪潮的推动下&#xff0c;正迅速发展。然而&#xff0c;许多人对它的价值仍持怀疑态度&#xff1a;认为智慧养殖只是昂贵的技术堆砌&#xff0c;短期内看不到经济回报&#xff0c;甚至怀疑其实用性。本文将挑战这些观点&a…

百川工作手机监控企业员工微信行为

在数字化转型的浪潮中&#xff0c;企业沟通方式正经历着前所未有的变革。微信&#xff0c;作为日常交流不可或缺的工具&#xff0c;已成为企业内外协作的重要桥梁。然而&#xff0c;随着业务量的激增&#xff0c;如何有效监控与管理员工在微信上的行为&#xff0c;确保信息安全…

LLM推理优化笔记1:KV cache、Grouped-query attention等

KV cache 对于decoder-only 模型比如现在如火如荼的大模型&#xff0c;其在生成内容的过程中&#xff0c;为了避免冗余计算&#xff0c;会将Transformer里的self-attention的K和V矩阵给缓存起来&#xff0c;这个过程即为KV cache。 decoder-only模型的生成过程是自回归的&…

让人工智能为你的旋律填词,开启音乐新章

在音乐的世界里&#xff0c;旋律如同灵动的精灵&#xff0c;飞舞在我们的心间。但有时&#xff0c;为这美妙的旋律找到最贴切、最动人的歌词&#xff0c;却成为了创作者们的难题。如今&#xff0c;随着科技的进步&#xff0c;人工智能正逐渐成为我们在音乐创作道路上的得力助手…

【香橙派 Orange pi AIpro】| 开发板深入使用体验

目录 一. &#x1f981; 写在前面二. &#x1f981; 愉快的安装流程2.1 安装前准备2.2 流程准备2.2.1 烧录镜像2.2.2 开机2.2.3 连网2.2.4 SSH远程连接开发板 2.3 体验 AI 应用样例 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 大家好&#xff0c;我是狮子呀&…

Windows下vscode配置C++环境

一、vscode下载及安装 vscode官网 选安装位置。 勾选这几项。 1.vscode界面中文配置 &#xff08;1&#xff09;点击扩展小图标&#xff0c;搜索插件&#xff0c;找到插件Chinese (Simplified) (简体中文) Language Pack&#xff0c;点击install。 &#xff08;2&#xf…

3dmax-vray5大常用材质设置方法

3dmax云渲染平台——渲染100 以高性价比著称&#xff0c;是预算有限的小伙伴首选。 15分钟0.2,60分钟内0.8;注册填邀请码【7788】可领30元礼包和免费渲染券 提供了多种机器配置选择(可以自行匹配环境)最高256G大内存机器&#xff0c;满足不同用户需求。 木纹材质 肌理调整&…

红酒的艺术之旅:品味、鉴赏与生活的整合

在繁忙的都市生活中&#xff0c;红酒如同一道不同的风景线&#xff0c;将品味、鉴赏与日常生活巧妙地整合在一起。它不仅仅是一种饮品&#xff0c;更是一种艺术&#xff0c;一种生活的态度。今天&#xff0c;就让我们一起踏上这趟红酒的艺术之旅&#xff0c;探寻雷盛红酒如何以…

json-server服务使用教程

目录标题 安装 json-server启动 json-server 本地服务 安装 json-server npm install -g json-server0.17.4json-server -v报错请参考&#xff1a;执行json-server -v报错 因为在此系统上禁止运行脚本。 启动 json-server 本地服务 查看本机IP&#xff1a;ipconfig Shift右…

【简历】安徽某二本学院:Java简历指导,简历通过率接近为0

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份二本独立院校的Java简历&#xff0c;那么一般来说&#xff0c;我们的独立院校包括专升本&#xff0c;在目前的it的投递中&#x…

NI VST 毫米波测试仪器创新

目录 概览​从UHF至V频段的频率覆盖范围&#xff1a;54 GHz远程测量模块​PXIe-5842&#xff1a;VST架构的扩展54 GHz扩频PXIe-5842功能​​宽频覆盖范围​IF和毫米波测试端口可满足多频带需求​高达2 GHz瞬时带宽误差矢量幅度测量性能相位相干同步基于PXI平台集成多种仪器 互补…

在centos7.9下静默安装Oracle19c详细流程

文章目录 下载安装包1.下载Oracle19c的安装包2.下载Oracle19c的预安装包3.拖到Linux中 一、安装依赖二、创建用户和组三、修改Linux相关内核参数四、修改用户限制五、关闭防火墙和SELinux六、创建安装目录并解压安装包七、设置环境变量八、安装Oracle数据库九、创建实例十、配置…