用java编程逐行输出 钟表一天内三指针重合时间,精确的秒
答案:2 悬赏:70 手机版
解决时间 2021-11-29 02:13
- 提问者网友:一抹荒凉废墟
- 2021-11-28 05:29
用java编程逐行输出 钟表一天内三指针重合时间,精确的秒
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-11-28 06:00
//构造一个GregorianCalendar,并且将年月日时分秒都定为0,得到一个基础时间值(精确到毫秒)
long base=new GregorianCalendar(0,0,0,0,0,0).getTime().getTime();
DateFormat df=new SimpleDateFormat("HH:mm:ss"); //构造一个时间格式对象(仅仅取时分秒)
//一天有60*60*12*2秒,从0秒开始,逐秒增加,判断该时刻是否发生针的重叠。
//把时钟盘面分成60格,判断时针、分针、秒针是否在同一格子上
for(int t=0;t<60*60*12*2;t++){
//计算时针所在格子,对60*60*12求余是将当前总秒数映射到半天的范围中(时针在后半天与前半天的位置变动一样),然后除以60得到分钟数,然而对于分针来说一分钟走一格子,对于时针来说则是走十二分之一格子(时针60分钟走5个格子),于是又再除以12得到时针所在的格子
int locHourHand=Math.round((t%(60*60*12))/(60*12));
// 对60*60求余得到分、秒段的数据,除以60得到其中分钟数,也对应于分针格子了。
int locMinuteHand=Math.round((t%(60*60))/60);
// 对60求余得到秒段数据,即秒针所在格子
int locSecondHand=t%60;
//若三者相同则表示重叠
if(locHourHand==locMinuteHand&&locHourHand==locSecondHand){
//此时将其恢复为一个正常的Date对象(Date对象精确到毫秒)
Date date=new Date(base+t*1000); //加上之前的基础时间值,再加上当天的时间
System.out.println(df.format(date)); //进行格式化输出追问Date date=new Date(base+t*1000); //加上之前的基础时间值,再加上当天的时间
您好,我想问一下,这里为什么要加上基础时间值?追答因为你要打印的是一天内的时间值,而t是从当天0点0分0秒开始计算的增量秒数,因此必须加上一个处于0点时刻的时间值来得到Date对象。如果加上的时刻不是0点时刻,那么加上增量之后很可能跨到第二天~~~
long base=new GregorianCalendar(0,0,0,0,0,0).getTime().getTime();
DateFormat df=new SimpleDateFormat("HH:mm:ss"); //构造一个时间格式对象(仅仅取时分秒)
//一天有60*60*12*2秒,从0秒开始,逐秒增加,判断该时刻是否发生针的重叠。
//把时钟盘面分成60格,判断时针、分针、秒针是否在同一格子上
for(int t=0;t<60*60*12*2;t++){
//计算时针所在格子,对60*60*12求余是将当前总秒数映射到半天的范围中(时针在后半天与前半天的位置变动一样),然后除以60得到分钟数,然而对于分针来说一分钟走一格子,对于时针来说则是走十二分之一格子(时针60分钟走5个格子),于是又再除以12得到时针所在的格子
int locHourHand=Math.round((t%(60*60*12))/(60*12));
// 对60*60求余得到分、秒段的数据,除以60得到其中分钟数,也对应于分针格子了。
int locMinuteHand=Math.round((t%(60*60))/60);
// 对60求余得到秒段数据,即秒针所在格子
int locSecondHand=t%60;
//若三者相同则表示重叠
if(locHourHand==locMinuteHand&&locHourHand==locSecondHand){
//此时将其恢复为一个正常的Date对象(Date对象精确到毫秒)
Date date=new Date(base+t*1000); //加上之前的基础时间值,再加上当天的时间
System.out.println(df.format(date)); //进行格式化输出追问Date date=new Date(base+t*1000); //加上之前的基础时间值,再加上当天的时间
您好,我想问一下,这里为什么要加上基础时间值?追答因为你要打印的是一天内的时间值,而t是从当天0点0分0秒开始计算的增量秒数,因此必须加上一个处于0点时刻的时间值来得到Date对象。如果加上的时刻不是0点时刻,那么加上增量之后很可能跨到第二天~~~
全部回答
- 1楼网友:酒者煙囻
- 2021-11-28 07:18
long base=new GregorianCalendar(0,0,0,0,0,0).getTime().getTime(); 定义一个0毫秒的基数,为了后面使用format做准备。
DateFormat df=new SimpleDateFormat("HH:mm:ss"); 设置格式化的样式
for循环是安装一天时间长度的总共有60*60*12*2秒(这个因为要精确到秒),在每个秒长度时间上,分别获得时针、分钟和秒针所在表盘的位置(表盘整个圆是60秒)。
然会判断三个针位置是否是一样的,如果一样就输入该时间。
DateFormat df=new SimpleDateFormat("HH:mm:ss"); 设置格式化的样式
for循环是安装一天时间长度的总共有60*60*12*2秒(这个因为要精确到秒),在每个秒长度时间上,分别获得时针、分钟和秒针所在表盘的位置(表盘整个圆是60秒)。
然会判断三个针位置是否是一样的,如果一样就输入该时间。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯