java里的日期时间
为了更好理解java的日期时间类,在这里我们先介绍一下关于历法、标准时间的一些概念。
历法有很多种,我们大中华上下五千年,自然也有自己的历法,生活中我们通常把自己传统的历法叫做农历,也有人叫它阴历或夏历。注意,这个“夏历”的“夏”和“夏令时间”的“夏”不是一个含义。“夏历”的“夏”是夏朝的“夏”,因为据说我们现在使用的这套农历在我国上古时期的夏朝时就已经发展得很完备了。
当然了,不只是中国有自己的历法,很多民族很多古文明国家都有过自己的历法。比如,格里高里历,它其实就是我们生活中使用和称作阳历或公历的这套历法。格里高利历是公历的标准名称,是一种源自于西方社会的历法。它先由意大利阿洛伊修斯·里利乌斯(约1519-1576)与克拉乌等学者在儒略历的基础上加以改革,后由教皇格里高利十三世于1582年颁布。我国是在辛亥革命后根据临时政府通电,从1912年1月1日正式使用格里高利历的。1949年9月27日,经中国人民政治协商会议第一届全体会议通过,中华人民共和国使用国际社会多数国家通用的西历和西元作为历法和纪年。
标准时间(Standard Time)有世界标准时间(World Standard Time,WST)和中国标准时间(China Standard Time,CST)。中国标准时间就是我们经常提到的北京时间,北京时间采用东八时区的区时作为标准时间。而世界标准时间即格林威治时间(GreenwichMeanTime,GMT),指位于英国伦敦郊区的皇家格林尼治天文台(1675年,当时,英国的航海事业发展很快,为了解决在海上测定经度的需要,英国当局在伦敦东南郊距市中心约20多千米,泰晤士河畔的皇家格林尼治花园中建立了这个天文台)的标准时间,本初子午线就被定义在那里,格林尼治标准时间的正午是指当太阳横穿格林尼治本初子午线时的时间。北京时间(中国标准时间)和格林威治时间(世界标准时间)相差整整八小时,即北京时间=格林威治时间+8小时。北京时间,东京时间,纽约时间这些标准时间都是在格林威治时间的基础上计算得来的。
java类库里有一个GregorianCalendar类,就是我们的格里高利历法类,它用这个类代表或者说包装了格里高利历法。因为GregorianCalendar这个类还和上面提到的儒略历也有关系,所以接下来我们把格里高利历和儒略历的关系也简单介绍一下。
儒略历是格里高利历(公历)的前身,于公元前46年,由当时的罗马统帅儒略·恺撒在天文学家索西琴尼的帮助下制订并执行。儒略历以回归年为基本单位,是一部纯粹的阳历,它比回归年365.2422日长0.0078日,400年要多出3.12日。1500年后由于误差较大,被罗马教皇格里高利十三世于1582年进行改善与修订,变为格里历,即沿用至今的世界通用的公历。格里高利历的历年平均长度为365日5时49分12秒,比回归年长26秒,虽然照此计算,3000年后仍存在1天的误差,但这样的精确度已经相当了不起了。由于它内容简洁,而且精度较高,因此它逐步为各国政府所采用。
注意:格里高利历1582年10月4日之前,应用的是儒略历。
1582年3月1日,格里高利颁发了改历命令,内容是:
一、1582年10月4日后的一天是10月15日,而不是10月5日,但星期序号仍然连续计算,10月4日是星期四,第二天10月15日是星期五。这样,就把1500年以来积累的老账一笔勾销了。
二、改闰年方法为: 凡公元年数能被4整除的是闰年,但当公元年数后边是带两个“0”的“世纪年”时,必须能被400整除的年才是闰年。
进入主题!!!
java里有一个Calendar抽象类(历法抽象类),其常用的实现类为GregorianCalendar类(格里高利历法类)。
注意java里的GregorianCalendar类在1582年10月4日之前,应用的也是儒略历。我们可以通过代码运用反证法来验证,我们知道,在格里高利历和儒略历的体系里是没有1582年10月5日、6日、7日这几个日期的,那我们就故意给java的GregorianCalendar类的对象赋值为1582年10月7日,看看它运行的结果到底是什么样子的?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JulianCalendar {
public static void main(String[] args) throws ParseException {
String str = "1582-10-07 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);
}
}
验证儒略历代码示例
Sun Oct 17 00:00:00 CST 1582
运行结果
从上面的代码运行结果看,我们肯定地得出结论,java的GregorianCalendar类包装的是格里高利历法和儒略历法。
如果我们想要实例化Calendar类,可以调用其静态方法getInstance(),该方法会根据当前系统所在地区返回一个实现类,大部分地区都是公历,即GregorianCalendar类。并且这个GregorianCalendar实现类默认表示当前系统时间,也就是windows操作系统桌面右下角的时间,对于我们来说就是阳历北京时间某年某月某日某时某分某秒……
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
}
}
示例代码
java.util.GregorianCalendar[time=1490616294512,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=2,WEEK_OF_YEAR=13,WEEK_OF_MONTH=5,DAY_OF_MONTH=27,DAY_OF_YEAR=86,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=4,SECOND=54,MILLISECOND=512,ZONE_OFFSET=28800000,DST_OFFSET=0]
运行结果
我们看到Calendar类的toString()方法包含的内容很多,但可读性不强。
所以这个时候我们需要用到Calendar类的另外一个方法,getTime()方法,这个方法返回的是一个Date类的对象。
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date);
}
}
示例代码
Mon Mar 27 19:38:40 CST 2017
运行结果
这个格式好多了,但它也不是我们大多数时候习惯的格式。
这时可以使用JDK里的另外一个类SimpleDateFormat,该类可以按照一个指定的自定义日期格式将Date与String之间进行相互转换,通过它我们可以得到想要的任何格式的日期表现形式。
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
System.out.println(str);
}
}
示例代码
2017-03-27 20:19:15
运行结果
java里的日期时间的更多相关文章
- Java 8 新日期时间 API
Java 8 新日期时间 API 1. LocalDate.LocalTime.LocalDateTime LocalDate.LocalTime.LocalDateTime 实例是不可变的对象,分别 ...
- 使用Java编写一个日期时间封装类
package base; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util ...
- Java里的日期和时间学习
Date date = new Date();//yyyy-mm-dd hh:mm:ss[.fffffffff] SimpleDateFormat sdf = new SimpleDateFormat ...
- java创建Date日期时间笔记
(1)public Date() 创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间. 例: Java代码 1.Date today=new Date(); //today被设置成创建时刻相 ...
- java android中日期时间 问题总结
Date 类型: Date date = new Date(); // 代表获取当前系统日期和时间 System.out.println(date); 使用类的方法设置时间和日期:(通过该方法初始 ...
- java基础之日期时间工具类
package zy.test; import java.sql.Timestamp; import java.text.ParseException; import java.text.ParseP ...
- 在java中进行日期时间比较的4种方法
1. Date.compareTo() java.util.Date提供了在Java中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数之后, ...
- java设定一个日期时间,加几分钟(小时或者天)后得到新的日期
//返回的是字符串型的时间,输入的 //是String day, int x public static String addDateMinut(String day, int x){ SimpleD ...
- Java获取系统日期时间
方法一:利用Calendar类来获取当前日期和时间,代码如下: /** * 获取系统时间 * @return */ public String getDate(){ Calendar calendar ...
随机推荐
- 集成支付宝-iOS
前言 坑坑坑,把踩过的坑都要记下来!! 正文 1.支付宝的demo和文档都好难找啊@_@,像我这个记忆不太好的,第二次都找不到!!为了方便大家,还是直接给大家网址吧,(不要太感谢我喔~)https:/ ...
- Windows程序员必须知道的字符编码和字符集
字符编码 (Character encoding) 在存储和传递文本过程中,为了使得所有电脑都能够正确的识别出文本内容,需要有一个统一的规则. 2. 字符集 (Character Set) ) 一般 ...
- SpringMvc拦截器小测试
前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...
- [Hadoop] - Win7下提交job到集群上去
一般我们采用win开发+linux hadoop集群的方式进行开发,使用插件:hadoop-***-eclipse-plugin. 运行程序的时候,我们一般采用run as application或者 ...
- Unity渲染优化中文翻译(三)——GPU的优化策略
如果游戏的渲染瓶颈来自于GPU 首要任务就是找出造成GPU瓶颈的因素所在,通常GPU的性能受到像素分辨率的影响,特别是在移动客户端的游戏,但是内存带宽和顶点计算的影响也需要注意.这些因素的影响都需要实 ...
- Uip学习简介及网址
http://www.ichanging.org/uip-stm32.html http://www.ichanging.org/share/ http://bbs.eeworld.com.cn/th ...
- dev简单实现柱状图,曲线图
1.数据源代码: DataTable dt = new DataTable(); dt.Columns.Add("A"); dt.Columns.Add("B" ...
- 基于Blod的ajax进度条下载实现
普通的浏览器下载 在web开发中,如果要实现下载功能,往往都是使用新开web页面或者是使用iframe的形式.实现起来其实很简单: <a target="_blank" hr ...
- 前端福利:使用Wallpaper Engine让自己的桌面炫酷起来
Wallpaper Engine,是一款Steam上的特别特别炫酷的壁纸定制软件.它可以对你的桌面进行定制,可以使用视频,动画,网页等形式来替换壁纸. 注意到没,关键是可以使用Html格式的文件作为桌 ...
- Win7_x64_Oracle 安装 PL/SQL Developer
Win7逐渐成为现行主流的windows操作系统,其32和64位系统平分秋色.然而当下还没有64位的PL/SQL Developer问世,直接用32位的PL/SQL Developer连接Win7(6 ...