先看一个简单的图:

主要的类有:

Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为epoch。在后文中如果没有明确说明,毫秒数就是指从1970年到对应时间的毫秒数。在Java 的Date类内部其实也是一个毫秒数,对外表现为一个Date对象。

Calendar是一个工具类,负责对Date类进行修改等操作,以及从Date类中提取年月日等时间的特定信息。

DateFormat 则负责日期的转换,比如读取特定格式的字符串,转换成date对象,或者将date对象按照指定的格式转成字符串。

1 Date 表示时刻。内部主要是一个long值存储距离纪元时的毫秒数。绝大多数方法都是过时的。

这里指的是:java.util.Date 日期格式:年月日时分秒

     public class Date{private transient long fastTime;Date(){this(System.currentTimeMillis());}Date(long date){fastTime = date;}//……}

2 TimeZone 时区(24个,如Asia/shanghai)

//获取默认时区 TimeZone.getDefault();

3 Locale 国家(或地区)和语言(如zh_CN)

// 获取默认国家和语言 Locale.getDefault();

4 Calendar 是日期和时间操作的主要类,是抽象类,提供了多个静态方法,可以获取Calendar实例。

与Date类似,Calendar内部也有一个表示时刻的毫秒数,还定义了一个数组(长度17),表示日历中各个字段的值。

proteted long time;
proteted int fields[];

fields中存放的是下面这些字段的值,给Calendar

    Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH,Calendar.DAY_OF_WEEK,Calendar.HOUR_OF_DAY,Calendar.MINUTE,Calendar.SECOND,Calendar.MILLISECOND

可以通过Calendar实例获取这些值(Calendar会根据时区,地区语言进行转换)。

    //空构造函数,会获取当前的。 Calendar.getInstance("Asia/shanghai","zh_CN")Calendar calendar = Calendar.getInstance();int day = calendar.get(Calendar.DAY_OF_MONTH);

Calendar还支持根据字段增加减少时间(负数表示减少)。

Calendar.getInstance().add(Calendar.MONTH,-2);

总结来说,Calendar做了一项非常繁琐的工作,根据TimeZone 和 Locale 再绝对时间毫秒数和日历字段之间自动进行转换。

5 DateFormat(线程不安全) 提供Date和字符串表示之间的转换,主要的两个方法 format(Date d),parse(String s)

Date的字符串表示与TimeZone、Locale都是相关的。
同时与两个格式化风格相关,一个是日期格式化风格,一个是时间格式化风格。
DataFormat是抽象方法,也用工厂方法创建对象。

    DateFormat.getTimeInstance();DateFormat.getDateInstance();DateFormat.getDateTimeInstance();

其中getTimeInstance只处理时间,getDateInstance只处理日期,getDateTimeInstance处理日期和时间,三种对象的处理结果如下

    Calendar calendar = Calendar.getInstance();//结果是21:34:20DateFormat.getTimeInstance().format(calendar.getTime());//结果是2019-02-20DateFormat.getDateInstance().format(calendar.getTime());//结果是2019-02-20 21:34:20DateFormat.getDateTimeInstance().format(calendar.getTime());

DateFormat虽然比较方便,但是日期字符串格式的更精确的控制,则应该使用SimpleDateFormat。

6 SimpleDateFormat(线程不安全) 是DateFormat的子类,与父类主要不同是:子类可以自定义日期格式。

   String pattern = "yyyy年MM月dd日 E HH时mm分ss秒";SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);//输出结果是 2019年02月20日 Wed 21时44分42秒OS.print(simpleDateFormat.format(calendar.getTime()));

pattern 中的英文字符a-z,A-Z表示特殊含义,其他字符原样输出.

SimpleDateFormat也可以方便的将字符串转成Date。

 String str = "19年2月20日 09时58分33秒111";Date date = new SimpleDateFormat("yy年M月dd日 HH时mm分ss秒SSS").parse(str);//结果 2019年02月20日 09时58分33秒String result = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(date);

7.java.sql.Date继承于java.util.Date,只保留了日期

java.sql.Date类在JDBC API中被使用,日期格式:年月日。如果你需要在java.sql.PreparedStatement上设置日期或者从java.sql.ResultSet获取日期,你将会和java.sql.Date打交道。
你可以用java.util.Date做的任何事同样适用于java.sql.Date。

long time = System.currentTimeMillis();
java.sql.Date date = new java.sql.Date(time);

java.sql.Datejava.util.Date最大的不同在于java.sql.Date所表示的日期中只保留了日期,而没有时间。
举个例子,如果你用2009-12-24 23:20来创建一个java.sql.Date,那么其中的时间(23:20)将会被切掉。如果你需要保留时间,使用 java.sql.Timestamp 来代替java.sql.Date

8.java.sql.Time继承于java.util.Date,只保留了时间

同java.sql.Date类在JDBC API中被使用,日期格式:时分秒。

9.java.sql.Timestamp继承于java.util.Date,对java.util.Date 类进行了扩充,该类提供了 getNanos() 方法

同java.sql.Date类在JDBC API中被使用,日期格式:年月日时分秒纳秒。

10.TimeUnit是一个时间单位枚举类,主要用于并发编程

时间单元表示给定粒度单元的时间持续时间,并提供实用程序方法来跨单元转换,以及在这些单元中执行计时和延迟操作。时间单元不维护时间信息,但只帮助组织和使用可能在不同上下文中分别维护的时间表示。
例如:尝试获取锁50毫秒:

Lock lock = ...;if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...

参考:https://www.jianshu.com/p/1478af429a1ehttps://blog.csdn.net/zhao123h/article/details/53012791http://ifeve.com/java-sql-date/

calendar获取本周一的日期_Java日期时间API系列1-----Jdk7及以前的日期时间类相关推荐

  1. java date只保留年月日_Java日期时间API系列14-----Jdk8中日期API类,日期计算1,获取年月日时分秒等...

    通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...

  2. java date加一天_Java日期时间API系列15-----Jdk8中API类,java日期计算2,年月日时分秒的加减等...

    通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...

  3. java 纳秒 格式化_Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。...

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

  4. SQL Server时间粒度系列----第4节季、年时间粒度详解

    本文目录列表: 1.SQL Server季时间粒度 2.SQL Server年时间粒度 3.总结语 4.参考清单列表 SQL Serve季时间粒度   季时间粒度也即是季度时间粒度.一年每3个月是一个 ...

  5. calendar获取本周一的日期_Java Calendar 获取本周周一和周日代码

    Java Calendar 获取本周周一和周日代码 /** * 得到本周周一 * * @return yyyy-MM-dd */ public static String getMondayOfThi ...

  6. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  7. java 包结构 枚举类_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  8. 重学Java8新特性(四) : 日期时间API、LocalDateTime、DateTimeFormatter、开发中时间工具类(常用)

    文章目录 一.JDK8中日期时间API的介绍 1.1.LocalDate.LocalTime.LocalDateTime的使用 2.2.Instant类的使用 2.3.DateTimeFormatte ...

  9. mysql 时间粒度_SQL Server时间粒度系列----第2节日期、周时间粒度详解

    从MySQL提供的TO_DAYS和FROM_DAYS针对函数说起 学习和使用过MySQL的博友,大都知道MySQL提供了很多针对日期和时间的函数,提供了获取不同时间粒度上的功能.相对而然SQL Ser ...

  10. calendar获取本周一的日期_Swift - 获取本周(或指定日期所在周)的第一天、最后一天日期...

    原来我写过一篇文章介绍如何计算当月.当年.或者指定年月的第一天.最后一天日期(点击查看).有网友问要怎么得到指定周的的第一天.最后一天日期.下面我通过代码进行演示. 一.获取本周的第一天.最后一天日期 ...

最新文章

  1. 【剑指offer-Java版】43n个骰子的点数
  2. 计算机科学中最重要的32个算法(转)
  3. [译]Visual Studio 2008 Code Metrics
  4. python字符编码
  5. 牛客16589 机器翻译
  6. 表按某个字段,新增一个序号列
  7. 程序常用配置文件格式介绍
  8. Python实现WGS 84坐标与web墨卡托投影坐标的转换
  9. SQL入门教程(一):基础知识
  10. git小乌龟版本回退
  11. 2023年度流行色出炉终于轮到火龙果和草莓熊制霸天下了 优漫动游
  12. python控制手机模拟器_Appium+python自动化23-Android夜神模拟器
  13. 超级光棍节,你想好怎么过了吗?来聆听大师的演讲吧
  14. Unity游戏动画 从入门到住院 1
  15. ppt学习06——排版
  16. 其次线性方程组,行列式为0,一定有非0解.
  17. 【PyCharm实用教程】最详细的Pycharm使用教程,你真不要进来学习一下?
  18. Opensips+Freeswitch负载均衡
  19. 广州市番禺区2021-2022学年九年级第一学期期末考试英语试题
  20. vasp测试计算机,vasp-test测试例子

热门文章

  1. 写程序需要做的几件事
  2. 【Webcam设计】总结与代码仓库
  3. MATLAB: 你不知道的12个基础知识
  4. 3月28日 simulink学习(一)
  5. Kotlin基本类型
  6. [C/C++11语法]_[0基础]_[lamba 表达式介绍]
  7. jquery的deferred使用详解
  8. 《C#高级编程(第六版)》泛型学习笔记(一):泛型优点和特性 (转载)
  9. 合并出错:svn Working copy and merge source not ready for reintegration
  10. Linux Linux内核参数调优