实体类-时间类(零点后经过秒数换算为时、分、秒)(Modifying the Internal Data Representation of a Class)
来源:互联网 发布:windows系统监控软件 编辑:程序博客网 时间:2024/04/27 04:11
问题描述:
给出零点以后经过的任意时间(用秒数表示),如何确定相应的时、分、秒。
本程序中, 在原来的时间类中,增加了新的构造函数:Time2 (int secondsPassed) ,测试类中使用t2,t3进行了测试,很完美!
其中,换算算法的推演及测试是在Excel中完成的。(Java +Excel,无敌了)
更新记录:
2016/07/09:增加了tick,incrementMinute, incrementHour三个方法,分别为增加1秒、1分和1小时。(已考虑时间的进位问题)
代码如下:
<pre class="java" name="code">package example;//JHTP Exercise 8.5,8.7: Modifying the Internal Data Representation of a Class,Enhancing Class Time2//by pandenghuang@163.com/**(Modifying the Internal Data Representation of a Class) It would be * perfectly reasonable for the Time2 class of Fig. 8.5 to represent * the time internally as the number of seconds since midnight rather * than the three integer values hour, minute and second. Clients could * use the same public methods and get the same results. Modify the Time2 * class of Fig. 8.5 to implement the time as the number of seconds * since midnight and show that no change is visible to the clients * of the class. * (Enhancing Class Time2) Modify class Time2 of Fig. 8.5 to include a tick method that incrementsthe time stored in a Time2 object by one second. Provide method incrementMinute to incrementthe minute by one and method incrementHour to increment the hour by one. Write aprogram that tests the tick method, the incrementMinute method and the incrementHour methodto ensure that they work correctly. Be sure to test the following cases:a) incrementing into the next minute,b) incrementing into the next hour andc) incrementing into the next day (i.e., 11:59:59 PM to 12:00:00 AM).*/// Fig. 8.5: Time2.java// Time2 class declaration with overloaded constructors. class Time2{ private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 // Time2 no-argument constructor: // initializes each instance variable to zero public Time2() { this(0, 0, 0); // invoke constructor with three arguments } //自定义时间类 public Time2(int secondsPassed){ if (secondsPassed<=0){ throw new IllegalArgumentException("经过秒数不能为负!"); } this.second=secondsPassed%60; this.minute=secondsPassed/60%60; this.hour=(secondsPassed/60/60%60>=24)?0:secondsPassed/60/60%60; } public Time2(int hour, int minute, int second) { if (hour < 0 || hour >= 24) throw new IllegalArgumentException("hour must be 0-23"); if (minute < 0 || minute >= 60) throw new IllegalArgumentException("minute must be 0-59"); if (second < 0 || second >= 60) throw new IllegalArgumentException("second must be 0-59"); this.hour = hour; this.minute = minute; this.second = second; } // Time2 constructor: another Time2 object supplied public Time2(Time2 time) { // invoke constructor with three arguments this(time.getHour(), time.getMinute(), time.getSecond()); } // Set Methods // set a new time value using universal time; // validate the data public void setTime(int hour, int minute, int second) { if (hour < 0 || hour >= 24) throw new IllegalArgumentException("hour must be 0-23"); if (minute < 0 || minute >= 60) throw new IllegalArgumentException("minute must be 0-59"); if (second < 0 || second >= 60) throw new IllegalArgumentException("second must be 0-59"); this.hour = hour; this.minute = minute; this.second = second; } // validate and set hour public void setHour(int hour) { if (hour < 0 || hour >= 24) throw new IllegalArgumentException("hour must be 0-23"); this.hour = hour; } // validate and set minute public void setMinute(int minute) { if (minute < 0 || minute >= 60) throw new IllegalArgumentException("minute must be 0-59"); this.minute = minute; } // validate and set second public void setSecond(int second) { if (second < 0 || second >= 60) throw new IllegalArgumentException("second must be 0-59"); this.second = second; } // Get Methods // get hour value public int getHour() { return hour; } // get minute value public int getMinute() { return minute; } // get second value public int getSecond() { return second; } // convert to String in universal-time format (HH:MM:SS) public String toUniversalString() { return String.format( "%02d:%02d:%02d", getHour(), getMinute(), getSecond()); } // convert to String in standard-time format (H:MM:SS AM or PM) public String toString() { return String.format("%d:%02d:%02d %s", ((getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12), getMinute(), getSecond(), (getHour() < 12 ? "AM" : "PM")); } //增加一秒 public void tick(){ if(second+1<60) second++; else if (second+1==60){ second=0; this.incrementMinute(); } } //增加一分钟 public void incrementMinute(){ if(minute+1<60) minute++; else if (minute+1==60){ minute=0; this.incrementHour(); } } //增加一小时 public void incrementHour(){ if(hour+1<24) hour++; else if (hour+1==24){ hour=0; } } } // end class Time2public class TimeTest { public static void main(String[] args) { Time2 t1 = new Time2(); // 00:00:00 Time2 t2 = new Time2(14386); // 零点后经过秒数(小于1天-86400秒) Time2 t3 = new Time2(1548980); // 零点后经过秒数(任意秒数) Time2 t4 = new Time2(12, 59, 40); // 12:59:40 Time2 t5 = new Time2(23, 59, 59); // 23:59:59 System.out.println("Constructed with:"); displayTime("t1: all default arguments", t1); displayTime("t2: 通过零点后经过秒数(小于1天-86400秒)推算时、分、秒", t2); displayTime("t3: 通过零点后经过秒数(任意秒数)推算时、分、秒", t3); displayTime("t4: hour, minute and second specified", t4); displayTime("t5: Time2 object t4 specified", t5); t4.tick(); t5.tick(); displayTime("t4: 增加1秒后的t4", t4); displayTime("t5: 增加1秒后的t5", t5); // attempt to initialize t6 with invalid values try { Time2 t6 = new Time2(27, 74, 99); // invalid values } catch (IllegalArgumentException e) { System.out.printf("%nException while initializing t6: %s%n", e.getMessage()); } } // displays a Time2 object in 24-hour and 12-hour formats private static void displayTime(String header, Time2 t) { System.out.printf("%s%n %s%n %s%n", header, t.toUniversalString(), t.toString()); } } // end class Time2Test
运行结果:
Constructed with:
t1: all default arguments
00:00:00
12:00:00 AM
t2: 通过零点后经过秒数(小于1天-86400秒)推算时、分、秒
00:00:00
12:00:00 AM
t3: 通过零点后经过秒数(任意秒数)推算时、分、秒
10:16:20
10:16:20 AM
t4: hour, minute and second specified
12:25:42
12:25:42 PM
t5: Time2 object t4 specified
12:25:42
12:25:42 PM
Exception while initializing t6: hour must be 0-23
0 0
- 实体类-时间类(零点后经过秒数换算为时、分、秒)(Modifying the Internal Data Representation of a Class)
- oracle数据库 将秒变为时:分:秒
- 求每日零点秒数
- JAVA 时间差距,两个时间相差多少天,时,分,秒;获取当天时间零点;获取及天钱的时间 (时间工具类)
- Postgresql 时间相减求 秒、分、小时数
- 秒级的时间换算
- 秒 毫秒 微秒 纳秒 皮秒。。时间单位换算
- 第一周项目三(2):时间类(秒,分,时各加n)
- 第一周项目三(1):时间类(秒,分,时各加一)
- 第一周项目三 时间类(2)增加多秒/分/时
- Java将秒换算成天、时、分、秒格式
- 在JS中将秒数转换为时分秒
- 时间的格式化(秒化分秒)
- java 获取当天(今日)零点零分零秒
- 用类来实现输入输出时间(时,分,秒)
- 时间换算(5分)
- 微秒, 纳秒,毫秒, 时间单位换算
- 把秒转换为时分秒
- 【bzoj2286】[Sdoi2011消耗战 虚树+dp
- C++ socket 开发
- java中接口回调与java回调机制
- JavaScript强化教程——Cocos2d-JS中JavaScript继承
- 合理使用ArrayMap代替HashMap
- 实体类-时间类(零点后经过秒数换算为时、分、秒)(Modifying the Internal Data Representation of a Class)
- JAVA NIO API简介
- 老客户新博客
- RabbitMQ(九):Publisher的消息确认机制
- Ubuntu update: Failed to fetch, Hash sum mismatch
- 第7章 Additional Lighting Models
- STL中map用法详解
- Java SE基础知识点总结(三)
- 欢迎页的制作