下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. java 计算时间依靠 1970 年 1 月 1 日开始的毫秒数2. date类的构造函数 date()返回代表当前创建的时刻的对象。date的方法gettime()返回一个long值在数值上等于1970 年 1 月 1 日之前或之后的时刻。3. dateformat类用来转换 date至U string,反之亦然。静态方法getdateinstance()返回 dateformat的缺省格式;getdateinstance(dateformat.field)返回指定的 dateformat 对象格式。format(date d)方法返回 string 表示日期,例如 january 1
2、,2002.反过来,parse(string s)方法返回以参数字符串表示的date对象。4. format() 方法返回的字符串格式根据不同地区的时间设置而有所不同。5. gregoriancalendear 类 有 两 个 重 要 的 构 造 函 数 : gregoriancalerdar(), 返 回 代 表 当 前 创 建 时 间 的 对 象 ;gregoriancalendar(int year,int month,int date)返回代表任意日期的对象。gregoriancalendar 类的 gettime()方法返回日期对象。 add(int field,int amount
3、) 方法通过加或减时间单位,象天数,月数或年数来计算日期。gregoriancalendar 和 时间两个 gregoriancalendar 的构造函数可以用来处理时间。前者创建一个表示日期,小时和分钟的对象:gregoriancalendar(int year, int month, int date, int hour, int minute)第二个创建一个表示一个日期,小时,分钟和秒:gregoriancalendar(int year, int month, int date, int hour, int minute, int second)首先,我应该提醒一下,每一个构造函数需要
4、时间信息中的日期信息(年,月,日)。如果你想说2:30 p.m.,你必须指出日期。同样,每一个 gregoriancalendar 构造函数创建一个在时间上使用毫秒计算的对象。所以,如果你的构造函数只 提供年,月,日参数,那小时,分钟,秒和毫秒的值将被置0.dateformat 和时间你可以使用静态方法 getdatetimeinstance(int datestyle,int timestyle) 来建立 dateformat 对象来显示时间和日期。这 个方法表明你想要的日期和时间格式。如果你喜欢使用缺省格式,可以使用getdatetimeinstance()来代替它。你可以使用静态方法 g
5、ettimeinstance(int timestyle) 创建 dateformat 对象来显示正确的时间。下面的程序示范了 getdatetimeinstance() 和 gettimeinstance() 怎样工作:import java.util.*;import java.text.*;public class apollo public static void main(string args) gregoriancalendar liftoffapollo11 = new gregoriancalendar(1969, calendar.july, 16, 9, 32);date
6、 d = liftoffapollo11.gettime();dateformat df1 = dateformat.getdatetimeinstance(dateformat.medium, dateformat.medium);dateformat df2 = dateformat.gettimeinstance(dateformat.short);string s1 = df1.format(d);string s2 = df2.format(d);在我的电脑上,上面的程序显示如下:jul 16, 1969 9:32:00 am9:32 am(输出根据你所在得地区有所不同 )计算时间间
7、隔你可能有时需要计算过去的时间;例如,给你开始和结束时间,你想知道制造流程的持续时间。一个出 租公司按小时或天数出租东西,计算时间对他们也很有用。同样的,在金融界,经常需要计算重要的支付时 间。将问题复杂化,人类至少是用两种方法计算时间。你可以说一天已经结束当 24 小时过去了,或者日历从今天 翻到明天。我们将讨论我们想到的这两种情况。时间段,情况 1:严格时间单位在这种情况中,只有 24 小时过去,这天才过去, 60 分钟过去,这个小时才过去, 60 秒过去,这个分钟才过 去,以此类推。在这个方法中, 23 小时的时间将被认为是 0 天。使用这种方法计算时间段,你从计算过去的毫秒开始。为了做
8、到这一点,首先转换每个日期为从1970年 1月 1日起得毫秒数。你可以从第二个毫秒值中减去第一个毫秒值。这里有一个简单的计算:import java.util.*;public class elapsedmillis public static void main(string args) gregoriancalendar gc1 = new gregoriancalendar(1995, 11, 1, 3, 2, 1);gregoriancalendar gc2 = new gregoriancalendar(1995, 11, 1, 3, 2, 2);/ the above two da
9、tes are one second apartdate d1 = gc1.gettime();date d2 = gc2.gettime();long l1 = d1.gettime();long l2 = d2.gettime();long difference = l2 - l1;上面的程序打印如下:elapsed milliseconds: 1000这个程序也带来一点混淆。 gregoriancalendar 类的 gettime() 返回一个 date 对象, date 类的 gettime() 方法返回从 1970年1月 1日到这个时间的 long 类型的毫秒数值。虽然他们的方法名
10、字相同,返回值却不一样! 下面的程序片断用简单的整数除法转换毫秒到秒:long milliseconds = 1999;long seconds = 1999 / 1000; 这种方法舍去小数部分转换毫秒到秒,所以 1,999 毫秒等于 1 秒, 2,000 毫秒等于 2 秒。计算更大的单位 - 例如天数,小时和分钟 -给定一个时间数值,可以使用下面的过程:1. 计算最大的单位,减去这个数值的秒数2. 计算第二大单位,减去这个数值的秒数3. 重复操作直到只剩下秒例如 ,如果你的时间的 10,000 秒,你想知道这个数值相应的是多少小时,多少分钟,多少秒,你从最大的单位 开始:小时。 10,00
11、0 除以 3600(一个小时的秒数)得到小时数。使用整数除法,答案是2 小时(整数除法中小数舍去)计算剩下的秒数, 10,000-(3,600 x 2) = 2,800 秒。所以你有 2 小时和 2,800 秒。将 2,800 秒转换成分钟, 2,800 除以 60。使用整数除法,答案是 46。2,800 - (60 x 46) = 40 秒。最后答案是 2 小 时, 46 分, 40 秒。下面的 java 程序使用上面的计算方法:import java.util.*;public class elapsed1 public void calchms(int timeinseconds) in
12、t hours, minutes, seconds;hours = timeinseconds / 3600; timeinseconds = timeinseconds - (hours * 3600);minutes = timeinseconds / 60;timeinseconds = timeinseconds - (minutes * 60);seconds = timeinseconds;public static void main(string args) elapsed1 elap = new elapsed1();elap.calchms(10000);输出结果如下:2
13、hour(s) 46 minute(s) 40 second(s) 上面的程序甚至在时间少于一个小时也可以正确的计算小时数。例如,你用上面的程序计算 1,000 秒,输出入 下:0 hour(s) 16 minute(s) 40 second(s) 举一个现实世界的例子,下面的程序计算阿波罗 11 飞到月球使用得时间:import java.util.*;public class lunarlanding public long getelapsedseconds(gregoriancalendar gc1, gregoriancalendar gc2) date d1 = gc1.getti
14、me();date d2 = gc2.gettime();long l1 = d1.gettime();long l2 = d2.gettime();long difference = math.abs(l2 - l1);return difference / 1000;public void calchm(long timeinseconds) long hours, minutes, seconds;hours = timeinseconds / 3600;timeinseconds = timeinseconds - (hours * 3600);minutes = timeinseco
15、nds / 60;public static void main(string args) gregoriancalendar lunarlanding = new gregoriancalendar(1969, calendar.july, 20, 16, 17);gregoriancalendar lunardeparture = new gregoriancalendar(1969, calendar.july, 21, 13, 54);gregoriancalendar starteva = new gregoriancalendar(1969, calendar.july, 20,
16、22, 56);gregoriancalendar endeva = new gregoriancalendar(1969, calendar.july, 21, 1, 9); lunarlanding apollo = new lunarlanding();long eva = apollo.getelapsedseconds(starteva, endeva);apollo.calchm(eva);long lunarstay = apollo.getelapsedseconds(lunarlanding, lunardeparture); apollo.calchm(lunarstay)
17、;上面程序输出如下:eva duration = 2 hour(s) 13 minute(s)lunar stay = 21 hour(s) 37 minute(s) 目前为止,我们计算的基础公式是这样的:1 分钟 =60 秒, 1小时 =60 分,1 天=24 小时。1 个月 =?天, 1 年=?天 怎么办?就产生了。例如,如果你使用月份的平均天数(近似 30.4375 ),并且计算下面的时间间隔 :* july 1, 2:00 a.m. to july 31, 10:00 p.m.* february 1, 2:00 a.m. to february 29, 10:00 p.m. 第一个计
18、算结果是 1个月;第二个结果是 0 个月! 所以,在计算严格单位时间的月份和年份是要想好。时间段,情况2: 时间单位变化时间单位的变化相当的简单:如果你要统计天数,你可以简单的统计日期变化次数。例如,如果某事 15 日开 始, 17日结束,经过 2天。(日期先是便到16,再到 17)同样的,一个步骤下午3:25 开始, 4:10 p.m 结束,历时 1 个小时,因为小时数值变了一次(从 3 到 4)。图书馆经常使用这种习惯计算时间。例如,如果你从图书馆接一本书,我不能占有这本书最少 24 小时,会认 为图书馆这样才给你算一天。而是,我的账号上记录我借书的日期。日期以变成下一天,我就已经结这本书
19、一 天了,即使总计不足 24 小时。当使用单位的变化来计算时间段,通常感觉计算的时间没有多于一个时间单位。例如,如果9:00 p.m .我借了一本图书馆的书,第二天中午还回去,我能算出我借了这本书一天了。可是,有一种感觉在问:1 天和几个小时呢?这本说总计借出 15个小时,答案是一天还差 9个小时呢?因此,这篇文章里,我将以一个时间单位变化 计算时间。单位变化的时间算法这是你怎样计算两个日期的时间变化:1. 制作两个日期的拷贝。close()方法能制作拷贝。2. 使用日期拷贝,将所有的小于时间单位变化的部分设置成它的最小单位。例如,如果计算天数,那么将小时,分钟,秒和毫秒设置成0。这种情况中,
20、使用clear()方法将时间值设置称他们各自的最小值。3. 取出较早的日期,将你要计算的单位加1,重复直到两个日期相等。你加 1 的次数就是答案。可以使用before()和after()方法,他们返回boolean值,来判断是否一个日期在另一个日期之前或之后。下面的类的方法用来计算天数和月数。import java.util.*;public class elapsedtime public int getdays(gregoriancalendar g1, gregoriancalendar g2) int elapsed = 0;gregoriancalendar gc1, gc2;if
21、(g2.after(g1) gc2 = (gregoriancalendar) g2.clone();gc1 = (gregoriancalendar) g1.clone();else gc2 = (gregoriancalendar) g1.clone();gc1 = (gregoriancalendar) g2.clone();gc1.clear(lisecond); gc1.clear(calendar.second);gc1.clear(calendar.minute); gc1.clear(calendar.hour_of_day);gc2.clear(cal
22、lisecond); gc2.clear(calendar.second);gc2.clear(calendar.minute); gc2.clear(calendar.hour_of_day);while ( gc1.before(gc2) ) gc1.add(calendar.date, 1); elapsed+;return elapsed;public int getmonths(gregoriancalendar g1, gregoriancalendar g2) int elapsed = 0;gregoriancalendar gc1, gc2;if (g2.a
23、fter(g1) gc2 = (gregoriancalendar) g2.clone();gc1 = (gregoriancalendar) g1.clone();else gc2 = (gregoriancalendar) g1.clone();gc1 = (gregoriancalendar) g2.clone(); gc1.clear(lisecond); gc1.clear(calendar.second); gc1.clear(calendar.minute); gc1.clear(calendar.hour_of_day); gc1.clear(calendar.date); gc2.clear(lisecond); gc2.clear(calendar.second); gc2.clear(calendar.minute);gc2.clear(calendar.hour_of_day); gc2.clear(calendar.date);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程建筑施工安全管理手册
- 2026年铁路消防演练总结报告
- 投资风险防控与责任担当承诺书(7篇)
- 基于云计算的智慧农业解决方案研究报告
- 行业分析数据收集模板
- 太阳能光伏发电推广承诺书(5篇)
- 2025 网络基础中网络容错机制的设计与测试课件
- 金融科技应用合规承诺函6篇
- 安全员生产安全管理规范手册
- 生态旅游保护发展承诺书5篇范文
- 第4课《坚持才会有收获》课件
- 二十届中纪委五次全会知识测试题及答案解析
- 2022年浙江纺织服装职业技术学院单招职业适应性测试试题及答案解析
- GB/T 26514-2011互叶白千层(精)油,松油烯-4-醇型茶树(精)油
- GA/T 1028.4-2017机动车驾驶人考试系统通用技术条件第4部分:道路驾驶技能考试系统
- 除灰点检技术标准
- 04第四章-火箭导弹的气动布局
- 齐鲁医学妊娠期急腹症
- 【部编版】六年级道德与法治下册全册课件
- 年龄相关性白内障课件
- 石膏头像素描之头骨篇课件
评论
0/150
提交评论