当前位置: 首页 > news >正文

Java日期查询

本实例使用有关日期处理和日期格式化的类实现一个日期查询的功能,即查询指定日期所在周的周一日期、两个指定日期间相差的天数和指定日期为所在周的星期几的日期 3 个功能。

从功能上来看,本实例至少需要定义 3 个方法,分别完成:获取指定日期所在周的周一日期、获取两个指定日期的相差天数以及获取指定日期为所在周的星期几的日期这 3 个功能,同时需要定义 Date 类型的日期与 String 类型之间的转换方法。

(1) 新建 Exercise 类,在该类中导入需要的包。代码如下:

 
  1. import java.text.Parse Exception;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. public class Exercise {
  6. // 在该类中有5个方法,在下面的步骤中将会讲解,这里省略
  7. }


(2) 在 Exercise 类中定义获取指定日期所在周的周一日期的方法——getMonday(),该方法是一个静态方法,返回值为 String 类型,并且需要传递一个 Date 类型的参数,然后将该日期参数作为 Calendar 对象的日期,并调用 Calendar 类的 set(int field,int value)方法改变 Calendar 对象中的日期,再将使用 SimpleDateFormat 类格式化后的日期返回。

getMonday() 方法的代码实现如下:

 
  1. // 获取指定日期所在周的周一日期
  2. public static String getMonday(Date date) {
  3.     Calendar c = Calendar.getInstance();
  4.     c.setTime(date);
  5.     c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
  6.     return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
  7. }

(3) 继续在 Exercise 类中定义获取两个日期间相差天数的方法——getTwoDay(),该方法需要传递两个 String 类型的参数。

在该方法的主体中,首先需要创建一个 SimpleDateFormat 类对象,并指定日期的格式,然后需要调用 SimpleDateFormat 对象的 parse() 方法,将传递过来的两个 String 类型的日期转换为 Date 类型,并将这两个 Date 类型的日期进行运算,得出相差的天数,返回一个 int 类型的变量。

getTwoDay() 方法的代码实现如下:

 
  1. // 获取两个日期间相差的天数
  2. public static int getTwoDay(String sj1, String sj2) {
  3.     SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
  4.     int day = 0;
  5.     try {
  6.         Date date = myFormatter.parse(sj1);
  7.         Date mydate = myFormatter.parse(sj2);
  8.         // 计算两个日期间相差的天数
  9.         day = (int)((date.getTime()-mydate.getTime())/(24*60*60*1000));
  10.     } catch(Exception e) {
  11.         return 0;
  12.     }
  13.     return day;
  14. }

(4) 在 Exercise 类中继续创建两个静态方法,分别完成 String 类型的日期与 Date 类型日期的互换功能。代码如下:

 
  1. // 将String类型的日期转换为Date类型
  2. public static Date strToDate(String strDate) {
  3. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  4. Date date = null;
  5. try {
  6. date = sdf.parse(strDate);
  7. } catch(ParseException e) {
  8. e.printStackTrace();
  9. }
  10. return date;
  11. }
  12. // 将Date类型的日期转换为String类型
  13. public static String DateToStr(Date date) {
  14. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  15. String strDate = sdf.format(date);
  16. return strDate;
  17. }

(5) 在 Exercise 类中定义获取指定日期所在周的指定星期的日期方法——getWeek(),该方法需要传递两个 String 类型的参数,其中第一个参数表示指定的日期,第二个参数表示星期几。

在该方法的主体中,首先调用了 strToDate() 方法,将 String 类型的日期转换为 Date 类型的日期,并将该日期作为 Calendar 类对象日期,然后判断传递过来的第二个参数的值,使用 Calendar 类中的 set(int field,int value) 方法改变日期,从而将格式化后的日期返回。

getWeek() 方法的代码实现如下:

 
  1. // 获得一个日期所在周的星期几的日期,如要找出2011年5月1日所在周的星期一是几号
  2. // @param sdate所确定的日期形式2011-05-01
  3. // @param num要确定的是周几(1表示周一,2表示周二)
  4. // @return
  5. public static String getWeek(String sdate, String num) {
  6. // 再转换为时间
  7. Date dd = strToDate(sdate);
  8. Calendar c = Calendar.getInstance();
  9. c.setTime(dd);
  10. int weekNo = Integer.parseInt(num);
  11. switch (weekNo) {
  12. case 1:
  13. c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); //返回星期一所在的日期
  14. break;
  15. case 2:
  16. c.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY); //返回星期二所在的日期
  17. break;
  18. case 3:
  19. c.set(Calendar.DAY_OF_WEEK,Calendar.WEDNESDAY); //返回星期三所在的日期
  20. break;
  21. case 4:
  22. c.set(Calendar.DAY_OF_WEEK,Calendar.THURSDAY); //返回星期四所在的日期
  23. break;
  24. case 5:
  25. c.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY); //返回星期五所在的日期
  26. break;
  27. case 6:
  28. c.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY); //返回星期六所在的曰期
  29. break;
  30. case 7:
  31. c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY); //返回星期曰所在的日期
  32. break;
  33. }
  34. return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
  35. }


(6) 创建测试类 Test15,调用 Exercise 类的方法,完成查询当前日期所在周的周一日期,并获取本周的周一曰期与当前曰期相差的天数,同时还可以查询本周中任意星期几的曰期。代码实现如下:

 
  1. package com.common.mxl;
  2. import java.util.Date;
  3. import java.util.Scanner;
  4. import com.common.mxl.Exercise;
  5. public class Test15 {
  6. public static void main(String[] args) {
  7. Scanner input = new Scanner(System.in);
  8. Date date = new Date();
  9. String monday = Exercise.getMonday(date);
  10. System.out.print("这周一的日期为【"+monday+"】,");
  11. String nowStr = Exercise.DateToStr(date); // 将 Date 类型的日期转换为 String 类型
  12. int num = Exercise.getTwoDay(nowStr,monday);
  13. System.out.print("与今天相差【"+num+"】天");
  14. SyStem.out.println("\n请输入您要查询本周星期几的日期(1表示星期一,2表示星期二…):");
  15. String weekNo = input.next(); //获取用户输入的星期
  16. int no = Integer.parseInt(weekNo);
  17. //将用户输入的星期转换为int类型,以便使用switch语句
  18. String strWeekNo = "";
  19. switch(no) {
  20. case 1:
  21. strWeekNo = "星期一";
  22. break;
  23. case 2:
  24. strWeekNo = "星期二";
  25. break;
  26. case 3:
  27. strWeekNo = "星期三";
  28. break;
  29. case 4:
  30. strWeekNo = "星期四";
  31. break;
  32. case 5:
  33. strWeekNo = "星期五";
  34. break;
  35. case 6:
  36. strWeekNo = "星期六";
  37. break;
  38. case 7:
  39. strWeekNo = "星期日";
  40. break;
  41. }
  42. System.out.println("本周【"+strWeekNo+"】的日期为:"+Exercise.getWeek(nowStr,weekNo));
  43. }
  44. }

在本程序中,综合使用了 Date 类、Calendar 类和 SimpleDateFormat 类完成了时间处理功能。在源码中,多次使用 Calendar 类的 set(int field,int value) 方法来改变日期,从而获取用户查询的日期。该方法在日期操作方面比较常用,大家需要熟练掌握该方法。

该程序的运行结果如下所示:

这周一的日期为【2023-10-15】,与今天相差【0】天
请输入您要查询本周星期几的日期(1表示星期一,2表示星期二…):
1
本周【星期一】的日期为:2023-10-15

相关文章:

Java日期查询

本实例使用有关日期处理和日期格式化的类实现一个日期查询的功能,即查询指定日期所在周的周一日期、两个指定日期间相差的天数和指定日期为所在周的星期几的日期 3 个功能。 从功能上来看,本实例至少需要定义 3 个方法,分别完成:获…...

uniapp 运行到 app 报错 Cannot read property ‘nodeName‘ of null

uniapp 运行到某一个页面&#xff0c;报错&#xff0c;h5没有问题 Unhandled error during execution of scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repovuejs/coreat <GuiPagecustomHeadertruecustomF…...

Mac M1通过homebrew安装Redis报错(perl: unknown or unsupported macOS version: :dunno)

〇、解决方案 升级homebrew&#xff0c;命令如下&#xff1a; brew update-reset一、问题现象 通过命令brew install redis安装Redis&#xff0c;异常如下&#xff1a; fatal: not in a git directory Warning: No remote origin in /opt/homebrew/Library/Taps/homebrew/h…...

如何在 Spring Boot 中进行分布式追踪

在 Spring Boot 中进行分布式追踪 分布式系统中的应用程序由多个微服务组成&#xff0c;它们可以位于不同的服务器、容器或云中。当出现问题时&#xff0c;如性能瓶颈、错误或延迟&#xff0c;了解问题的根本原因变得至关重要。分布式追踪是一种用于跟踪和分析分布式应用程序性…...

Lniux三剑客——Grep

前言 echo guangge{01…100…2} 第二个是间隔多少个计数 命令别名 alias&#xff0c; unalias &#xff0c; 作用是封装命令&#xff1a; alias rm ‘rm -i’ 命令历史 history !行号 !! 上一次的命令 ctrl a 移动到行首 ctrl e 移动到行尾 Grep 格式&#xff1a; gre…...

选实验室超声波清洗机易忽视的内容?小型清洗机的优点有?

实验室超声波清洗机如今在行业内占据着重要的一席之地&#xff0c;摒弃了传统模式&#xff0c;坚持以超声波为主的清洗方式&#xff0c;在市场中获得的反响强烈。服务好&#xff0c;有诚信的实验室超声波清洗机能够消除客户的后顾之忧&#xff0c;工作人员会以真诚态度向客户提…...

基于Java使用SpringBoot+Vue框架实现的前后端分离的美食分享平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在当今社会&#xff0…...

开源数据库MySQL 8.0 OCP认证精讲视频、环境和题库 之二

修改用户的初始密码&#xff1a; mysql>alteruserrootlocalhostidentifiedbyQaz1234&#xff1b; 或者&#xff1a; mysql>alteruseruser0identifiedbyQaz_1234; 在版本5.x中&#xff1a; mysql>setpasswordpassword(Qaz_1234); 可执行文件&#xff1a; 服务器端&…...

AI对网络安全的影响与挑战

近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;网络安全领域也开始逐渐引入生成式AI应用。根据最新的数据研究&#xff0c;生成式AI对网络安全和合规的影响最大&#xff0c;同时也包括了IT和云的运维、硬件和软件支持领域。通过AI和自动…...

微信小程序备案流程操作详解,值得收藏

目录 一、小程序备案法律法规参考 二、备案前准备 2.1 备案入口 2.1.1、未上架小程序 2.1.2、已上架小程序 (二)备案类型 (三)备案材料准备 3.1、小程序备案材料 3.2、前置审批材料 3.3、个人备案 3.4、非个人备案 三、备案整体流程 (一)备案信息填写 1、主体信息…...

【NLTK系列01】:nltk库介绍

一、说明 NLTK是个啥&#xff1f;它是个复杂的应用库&#xff0c;可以实现基本预料库操作&#xff0c;比如&#xff0c;、将文章分词成独立token&#xff0c;等操作。从词统计、标记化、词干提取、词性标记&#xff0c;停用词收集&#xff0c;包括语义索引和依赖关系解析等。 …...

人机环境系统智能有利于防止人工智能失控

当前&#xff0c;人工智能的失控是一个备受关注的话题。尽管目前还没有出现完全失控的人工智能系统&#xff0c;但确实存在一些潜在的风险和挑战需要我们重视和应对。一些可能导致人工智能失控的因素包括&#xff1a; 误用和恶意使用&#xff1a;人工智能技术可以被用于恶意活动…...

用于多目标检测的自监督学习(SELF-SUPER VISED LEARNING FOR MULTIPLE OBJECTDETECTION)

在本章中,我们提出了一种新的自监督学习(SSL)技术,以从头顶图像中提供关于实例分割不确定性的模型信息。我们的SSL方法通过使用测试时数据增强和基于回归的旋转不变伪标签细化技术来改进对象检测。我们的伪标签生成方法提供多个经过几何变换的图像作为卷积神经网(CNN)的输…...

HDLbits: ps2data

这一题在上一题基础上多了一个输出&#xff0c;并且这个输出是不需要像上一题考虑出错的情况的&#xff0c;所以只要把输入in按次序排好就可以。我一开始的想法是在状态切换判断的always块里把in赋给out&#xff0c;但是不正确&#xff0c;代码如下&#xff1a; module top_mo…...

SpringCloudAlibaba SpringCloud SpringBoot 版本对照

由于 Spring Boot 3.0&#xff0c;Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大&#xff0c;目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下&#xff0c;为了同时满足存量用户和新用户不同需求&#xff0c;社区以 Spring Boot 3.0 和 2.4 分别为…...

Swift基础

本文是个比较简单的学习笔记&#xff0c;更详细的内容见 Swift官方文档 1、相等性比较 Swift标准库用 < 和 运算符定义了 >、>、<&#xff0c;所以实现 Comparable 的 < 运算符就会自动得到这些运算符的实现&#xff0c;实际上 Comparable 继承自 Equatable&…...

基于php+thinkphp+vue的校园二手交易网站

运行环境 开发语言&#xff1a;PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHPvue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发…...

SystemVerilog Assertions应用指南 第一章(1.25章节 “first_match”运算符)

任何时候使用了逻辑运算符(如“and”和“or”)的序列中指定了时间窗,就有可能出现同一个检验具有多个匹配的情况。“ first match”构造可以确保只用第一次序列匹配,而丢弃其他的匹配。当多个序列被组合在一起,其中只需时间窗内的第一次匹配来检验属性剩余的部分时,“ first ma…...

python和go执行字符串表达式

1、python/eval python里可以使用内置的eval函数&#xff0c;来执行一个字符串表达式的结果&#xff0c;字符串表达式里可以是变量、函数、运算符等 def test():return True flag False print(eval("test() and True and flag" )) 执行结果为False 2、golang/go…...

Python算法练习 10.14

leetcode 2095 删除链表的中间节点 给你一个链表的头节点 head 。删除 链表的 中间节点 &#xff0c;并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...