当前位置:天才代写 > tutorial > JAVA 教程 > Java时间相关内容进修(3) Date

Java时间相关内容进修(3) Date

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:648

副标题#e#

本章主要先容Date类,并通过示例进修如何利用它。最后,讲授一下UTC、GMT和时区的干系。

Date 先容

Date 界说

public class Date implements java.io.Serializable, Cloneable, Comparable<Date> {}

Date 是暗示时间的类。
一个Date工具暗示一个特定的瞬间,能准确到毫秒。我们可以通过这个特定的瞬间,来获取到Date对应的“年、月、日、时、分、秒”。反之亦然,我们也可以通过配置Date的“年、月、日、时、分、秒”等信息,来改变Date所指定的特定瞬间。
除了“年代日时分秒”等信息之外,Data也答允名目化息争析日期字符串。即,我们可以界说一个字符串,这个字符串包括时间信息,然后将字符勾串过Date来理会,从而获得相应的Date工具。

在 JDK 1.1 之前,凡是是通过Data操纵“年代日时分秒”。不外,由于Date的相关 API 不易于实现国际化。从 JDK 1.1 开始,应该利用 Calendar 类来操纵“年代日时分秒”,同时可以通过 DateFormat 类来名目化息争析日期字符串。Date 中的相应要领已废弃。

Date和Calendar彼此转换

(01) Date转换为Calendar

// 新建date,且日期/时间为2013-09-19 14:22:30
Date date = new Date(113, 8, 19, 14, 22, 30);
// 新建Calendar工具,并配置日期为date
Calendar cal = Calendar.getInstance();
cal.setTime(date);

(02) Calendar换为Date

// 新建Calendar工具
Calendar cal = Calendar.getInstance();
// 获取Calendar对应的Date
Date date = cal.getTime();

Date 函数列表

Date 共包括下面5个结构函数
 

// Date结构函数一:传入“年、月、日”
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
Date(int year, int month, int day)
     
// Date结构函数二:传入“年、月、日、时、分”
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
// (04) 时 -- 0-23 之间的小时数。
// (05) 分 -- 0-59 之间的分钟数。
Date(int year, int month, int day, int hour, int minute)
     
// Date结构函数三:传入“年、月、日、时、分、秒”
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
// (04) 时 -- 0-23 之间的小时数。
// (05) 分 -- 0-59 之间的分钟数。
// (06) 秒 -- 0-59 之间的秒钟数。
Date(int year, int month, int day, int hour, int minute, int second)
     
// Date结构函数四:传入“毫秒”。 毫秒 = “方针时间” - “1970-01-01 00:00:00 GMT”
Date(long milliseconds)
     
// Date结构函数五:传入“字符串”。
Date(String string)

Date的操纵API

// 按照参数确定日期和时间。这些参数被表明为年份、月份、月中某一天、一天中的某一小时、小时中某一分钟和分钟中的某一秒。
static long     UTC(int year, int month, int day, int hour, int minute, int second)
// 这天期是否在指定日期之后。
boolean     after(Date date)
// 这天期是否在指定日期之前
boolean     before(Date date)
// 返回此工具的副本。
Object     clone()
// 较量两个日期的顺序。
int     compareTo(Date date)
// 较量两个日期是否相等。
boolean     equals(Object object)
// 返回此 Date 工具暗示的月份中的某一天。返回的值在 1 和 31 之间,暗示包括或开始于此 Date 工具暗示的时间的月份中的某一天(用当地时区举办表明)。
int     getDate()
// 返回这天期暗示的周中的某一天。返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 暗示一周中的某一天
int     getDay()
// 返回此 Date 工具暗示的小时。返回值是一个数字(0 至 23)
int     getHours()
// 返回这天期所暗示的小时已经已往的分钟数(用当地时区举办表明)。返回值在 0 和 59 之间。
int     getMinutes()
// 返回暗示月份的数字,该月份包括或开始于此 Date 工具所暗示的瞬间。返回的值在 0 和 11 之间。0为一月,1为二月,依次类推。
int     getMonth()
// 返回这天期所暗示的分钟已经已往的秒数。返回的值在 0 和 61 之间。值 60 和 61 只大概产生在思量了闰秒的 Java 虚拟机上。
int     getSeconds()
// 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 工具暗示的毫秒数。
long     getTime()
// 返回相对付 UTC(相应于此 Date 工具暗示的时间)的当地时区的偏移量(以分钟为单元)。
int     getTimezoneOffset()
// 返回一个值,此值是从包括或开始于此 Date 工具暗示的瞬间的年份减去 1900 的功效(用当地时区举办表明)。
int     getYear()
// 哈希值
int     hashCode()
// 把字符串 s 表明为日期和时间的暗示形式。
static long     parse(String string)
// 把此 Date 工具的月份中的某一天配置为指定值。
void     setDate(int day)
// 把此 Date 工具的小时配置为指定值。
void     setHours(int hour)
// 把此 Date 工具的分钟数配置为指定值。
void     setMinutes(int minute)
// 把这天期的月份配置为指定值。0为一月,1为二月,依次类推。
void     setMonth(int month)
// 把此 Date 的秒数配置为指定值。
void     setSeconds(int second)
// 配置此 Date 工具,以暗示 1970 年 1 月 1 日 00:00:00 GMT 今后 time 毫秒的时间点。
void     setTime(long milliseconds)
// 把此 Date 工具的年份配置为指定的值加 1900。
void     setYear(int year)
// 返回GMT字符串
String     toGMTString()
// 返回当地字符串
String     toLocaleString()
// 返回字符串
String     toString()


#p#副标题#e#

Date示例

#p#分页标题#e#

下面我们通过示例进修利用Date的API。
源码如下(DateTest.java):

import java.util.Date;
import java.util.Calendar;

/**
* java Date类的测试措施
*
* 留意几点:
* (01) Date中的“年” -- 读取/配置 到的年份值=“‘时间年份’ - 1900年”
* (02) Date中的“月” -- 0是一月,1是二月,2是三月,依次类推。
* (03) Date中的“礼拜几” -- 1是周日,2是周一,3是周二,依次类推。
*
* @author skywang
*/
public class DateTest {

public static void main(String[] args) {

// 测试Date的结构函数:Date共有5类结构函数
testDateConstructor();

// 测试Date类的“配置”、“读取”函数
testDateSet();

// 测试Date类的before(), after(), compareTo(), equals(), clone(), parse()等接口
testOtherDateAPIs();
}

/**
* 测试Date的结构函数:Date共有5类结构函数
*/
private static void testDateConstructor() {

Date date;

// Date结构函数一:传入“年、月、日”。
// 参数说明
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
// 配置时间为“1988-08-08”
date = new Date(88,7,8);
System.out.printf("Constructor-1 : %s\n", tostring(date));

// Date结构函数二:传入“年、月、日、时、分”
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
// (04) 时 -- 0-23 之间的小时数。
// (05) 分 -- 0-59 之间的分钟数。
// 配置时间为“1999-09-09 19:19”
date = new Date(99,8,9,19,19);
System.out.printf("Constructor-2 : %s\n", tostring(date));

// Date结构函数三:传入“年、月、日、时、分、秒”
// (01) 年 -- 减 1900 的年份。若要设为1988,则“年”应该是88。
// (02) 月 -- 0-11 的月份。0是一月,1是二月,依次类推。
// (03) 日 -- 1-31 之间的某一天。
// (04) 时 -- 0-23 之间的小时数。
// (05) 分 -- 0-59 之间的分钟数。
// (06) 秒 -- 0-59 之间的秒钟数。
date = new Date(100,10,10,20,10,10);
System.out.printf("Constructor-3 : %s\n", tostring(date));

// Date结构函数四:传入“毫秒”。 毫秒 = “方针时间” - “1970-01-01 00:00:00 GMT”
// 973858210000(ms) 对应时间 2000-10-10 8:10:10
date = new Date(973858210000l);
System.out.printf("Constructor-4 : %s\n", tostring(date));

// Date结构函数五:传入“字符串”。可觉得以下几种名目:
// (留意,year值 = “实际年份-1900”)
// 1955-08-12 13:30:00
date = new Date("Sat, 12 Aug 95 13:30:00 GMT");
System.out.printf("Constructor-5.1: %s\n", tostring(date));
// 1955-08-12 13:30:00
date = new Date("12 Aug 95 13:30:00");
System.out.printf("Constructor-5.2: %s\n", tostring(date));
// 1955-08-12
date = new Date("12 Aug 95");
System.out.printf("Constructor-5.3: %s\n", tostring(date));
}

/**
* 测试Date类的“读取”函数
*/
private static void testGet(Date date) {
// “年”。减 1900 的年份。若为1988,则“年”是88。
int year = date.getYear();
// “月”。 0-11 的月份。0是一月,1是二月,依次类推。
int month = date.getMonth();
// “日”
int day = date.getDate();
// “时”
int hour = date.getHours();
// “分”
int minute = date.getMinutes();
// “秒”
int second = date.getSeconds();
// “礼拜(几)”。 周日是1,周一是2,周二是3,依次类推。
int weekday = date.getDay();
// “毫秒”。毫秒 = “方针时间” - “1970-01-01 00:00:00 GMT”
long millis = date.getTime();
// “时区偏移”。相对付 UTC 的当地时区的偏移量(以分钟为单元)。
int timezoneoffset = date.getTimezoneOffset();

//System.out.printf("\t!!!date get is: %s\n", tostring(date));
System.out.println("\t!!!get date: "+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second+"\t"+millis+"(ms)");
}

/**
* 测试Date类的“配置”函数
*/
private static void testDateSet() {
// 新建date
Date date = new Date(99,8,9);

// 配置Date为“2013-09-19 15:28:30”
// 设为“2013年”。传入值是“‘方针年份’ - ‘1900 的年份’”
date.setYear(113);
// 设为“8月”,传入的参数应该是8。因为,一月是0,二月是1,依次类推。
date.setMonth(8);
// 设为“19日”
date.setDate(19);
// 设为“15”(上午)。回收的24时制;因此,若要设为上午3点,应该传入参数3。
// 查察本栏目

GMT、UTC、时区的干系

#p#分页标题#e#

很多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘上密密麻麻的英文单字代表着什么意义与浸染呢?这些都是新手在打仗两地时间表或世界时区表时,脑海中所不绝表现的各种疑问,以下将带您一探时区玄妙的毕竟。

世界时区及国际换日线示意图

Java时间相关内容学习(3) Date

Java时间相关内容学习(3) Date

全球24个时区的分别

相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得紧密与巨大多了,凡是世界时区表的表盘上会标示着全球24个时区的都市名称,但毕竟这24个时区是如何发生的?过归天界各地原本各自拟订内地时间,但跟着交通和电讯的发家,各地交换日益频繁,差异的处所时间,造成很多困扰,于是在西元1884年的国际集会会议上拟定了全球性的尺度时,明定以英国伦敦格林威治这个处所为零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°,拟订每隔经度15°,时差1小时。而每15°的经线则称为该时区的中央经线,将全球分别为24个时区,个中包括23个整时区及180°经线阁下两侧的2个半时区。就全球的时间来看,东经的时间比西经要早,也就是假如格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。以台湾为例,台湾位于东经121°,换算后与格林威治就有8小时的时差。假如两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则要增加一日。

格林威治尺度时间GM

十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而举办天体视察。1675年旧皇家视察所(Old Royal Observatory) 正式创立,到了1884年抉择以通过格林威治的子午线作为分别地球对象两半球的经度零度。视察所门口墙上有一个符号24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为尺度来设按时间,这就是我们耳熟能详的「格林威治尺度时间」(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有两地时间成果,也就是同时可以显示原居地和另一个国家的时间。

世界协调时间UTC

#p#分页标题#e#

大都的两地时间表都以GMT来暗示,但也有些两地时间表上看不到GMT字样,呈现的反而是UTC这3个英文字母,毕竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界尺度时间、世界统一时间),是颠末平均太阳时(以格林威治时间GMT为准)、地轴举动批改后的新时标以及以「秒」为单元的国际原子时所综合精算而成的时间,计较进程相当严谨紧密,因此若以「世界尺度时间」的角度来说,UTC比GMT来得越发精准。其误差值必需保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局宣布闰秒,使UTC与地球自转周期一致。所以根基上UTC的本质强调的是比GMT更为准确的世界时间尺度,不外对付现行表款来说,GMT与UTC的成果与准确度是没有不同的。

夏日节省时间DS

所谓「夏日节省时间」Daylight Saving Time(简称D.S.T.),是指在夏天太阳升起的较量早时,将时钟拨快一小时,以提早日光的利用,在英国则称为夏令时间(Summer Time)。这个构思于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节省时间的国度,以削减灯光照明和耗电开支。自此今后,全球以欧洲和北美为主的约70个国度都引用这个做法。今朝被分别成两个时区的印度也正在商讨是否全国该统一实行夏令日光节省时间。欧洲手机上也有许多GSM系统的基地台,除了会传送内地时间外也包罗夏令日光节省时间,做为手机的时间尺度,利用者可以自行抉择要开启或封锁。值得留意的是,某些国度有实施「夏日节省时间」的制度,出国时别忘了跟从内地习惯在表上调解一下,这但是机器表没有的成果设计哦!

 

    关键字:

天才代写-代写联系方式