Java的日期类Date

Date类

注意:是java.util.Date;

而非 java.sql.Date,此类是给数据库访问的时候使用的

示例 1 : 时间原点概念

所有的数据类型,无论是整数,布尔,浮点数还是字符串,最后都需要以数字的形式表现出来。

日期类型也不例外,换句话说,一个日期,比如2020年10月1日,在计算机里,会用一个数字来代替。

那么最特殊的一个数字,就是零. 零这个数字,就代表Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点,因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时)

为什么对应1970年呢? 因为1969年发布了第一个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。

所有的日期,都是以为这个0点为基准,每过一毫秒,就+1。

示例 2 : 创建日期对象

package date;

//
import java.util.Date; public class TestDate { public static void main(String[] args) { // 当前时间
Date d1 = new Date();
System.out.println("当前时间:");
System.out.println(d1);
System.out.println();
// 从1970年1月1日 早上8点0分0秒 开始经历的毫秒数
Date d2 = new Date(5000);
System.out.println("从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间");
System.out.println(d2); }
}

示例 3 : getTime

getTime() 得到一个long型的整数

这个整数代表 从1970.1.1 08:00:00:000 开始 每经历一毫秒,增加1

直接打印对象,会看到 “Tue Jan 05 09:51:48 CST 2016” 这样的格式

package date;

//
import java.util.Date; public class TestDate { public static void main(String[] args) {
//注意:是java.util.Date;
//而非 java.sql.Date,此类是给数据库访问的时候使用的
Date now= new Date();
//打印当前时间
System.out.println("当前时间:"+now.toString());
//getTime() 得到一个long型的整数
//这个整数代表 1970.1.1 08:00:00:000,每经历一毫秒,增加1
System.out.println("当前时间getTime()返回的值是:"+now.getTime()); Date zero = new Date(0);
System.out.println("用0作为构造方法,得到的日期是:"+zero); }
}

示例 4 : System.currentTimeMillis()

当前日期的毫秒数

new Date().getTime() 和 System.currentTimeMillis() 是一样的

不过由于机器性能的原因,可能会相差几十毫秒,毕竟每执行一行代码,都是需要时间的

package date;

//
import java.util.Date; public class TestDate { public static void main(String[] args) {
Date now= new Date(); //当前日期的毫秒数
System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());
//通过System.currentTimeMillis()获取当前日期的毫秒数
System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis()); }
}

练习日期

借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期

答案

package date;

import java.util.Date;

public class TestDate {

    public static void main(String[] args) {
long second = 1000;
long minute = 60*second;
long hour = minute * 60;
long day = hour*24;
long year = day * 365;
long year1995Start = (1995-1970) * year;
long leapDay = (1995-1970)/4*day; //每隔4年有一个润日
year1995Start+=leapDay;
long eightHour = hour*8; //8个小时的毫秒数,因为从0毫秒对应的是1970.1.1 08:00:00
year1995Start-=eightHour; Date dStart = new Date(year1995Start);
System.out.println("1995年第一天:"+dStart);
long year1995End = year1995Start + year - 1;
Date dEnd = new Date(year1995End);
System.out.println("1995年最后一天:"+dEnd); long randomTime = (long) (Math.random()*(year-1) + year1995Start);
Date dRandom = new Date(randomTime);
System.out.println("1995年这一年中的一个随机时间:" + dRandom); }
}

Java自学-日期 Date的更多相关文章

  1. Java对日期Date类进行加减运算,年份加减,月份加减

      import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Da ...

  2. Java对日期Date类进行日期加减运算,年份加减,月份加减

    package com.cy; import java.security.InvalidParameterException; import java.text.ParseException; imp ...

  3. 【转】Java对日期Date类进行加减运算,年份加减,月份加减

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Date ...

  4. Java自学-日期 Calendar

    Java的Calendar类 Calendar类即日历类,常用于进行"翻日历",比如下个月的今天是哪天 示例 1 : Calendar与Date进行转换 采用单例模式获取日历对象C ...

  5. Java自学-日期 日期格式化

    Java中使用SimpleDateFormat 进行日期格式化类 SimpleDateFormat 日期格式化类 示例 1 : 日期转字符串 y 代表年 M 代表月 d 代表日 H 代表24进制的小时 ...

  6. Java 实现日期 Date 的赋值

    关键的语句也就三句话: (1) SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); (2) Date ...

  7. 转 Java对日期Date类进行加减运算一二三

    请移步,https://blog.csdn.net/hacker_lees/article/details/74351838 ,感谢博主分享

  8. Java对日期Date类进行加减运算一二三

    转载大神 https://blog.csdn.net/hacker_lees/article/details/74351838

  9. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

随机推荐

  1. Manacher算法(马拉车)求最长回文子串

    Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...

  2. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

  3. CefSharp 屏蔽右键菜单

    既然是C#+web混用模式,当然就需要把web的右键操作屏蔽掉咯.废话不说了直接上代码. internal class MenuHandler : IMenuHandler { public bool ...

  4. HTML基础四-VUE

    一.VUE VUE官网:https://cn.vuejs.org/v2/guide/ 1.1 Vue简介 VUE与JS的区别 VUE在JS的基础上进行了优化 增加VUE最强大的特点,对数据操作特别的友 ...

  5. 用ant.design的设计注意点---表单

    设计的时候,输入表单项 最好放在一起,不要散落在页面各处,会导致表单项穿插存储数据,穿插验证表单,表单的样式设计要严格按照ant的版来,因为表单是交互最多最容易出错的地方,否则浪费太多工作量 持续集成 ...

  6. Windbg Call Stack(调用堆栈)窗口的使用

    调用堆栈是指向程序计数器当前位置的函数调用链.调用堆栈的顶部函数是当前函数,下一个函数是调用当前函数的函数,依此类推.显示的调用堆栈基于当前程序计数器,除非更改寄存器上下文. 在 WinDbg 中,可 ...

  7. __int128 输入输出模板

    #include <bits/stdc++.h> using namespace std; void scan(__int128 &x)//输入 { x = ; ; char ch ...

  8. WPF 数据绑定,界面刷新的两种方法-----INotifyPropertyChanged

    .Netformwork4.0及以下版本 -------INotifyPropertyChanged 命名空间: System.ComponentModel 后台代码 public partial c ...

  9. GitHub 上传文件过大报错:remote: error: GH001: Large files detected.

    1.查看哪个文件过大了 报错信息: remote: Resolving deltas: 100% (24/24), completed with 3 local objects. remote: wa ...

  10. 在导入pytorch时libmkl_intel_lp64.so找不到

    安装或者更新完pytorch后,运行不了,显示错误: (base) xu@xusu:~$ python Python (default, Dec , ::) [GCC ] :: Anaconda, I ...