我想以毫秒为单位获取一天的时间,我今天不会有任何具体日期,只是一次。我做了一些东西,认为它有效,但随后进行了调试并得出结论认为它不起作用我想要它。
我想用它来检查当前时间是否在指定的startTime
和endTime
之间。
long startTime = settings.getLong("startTime", 0);
long endTime = settings.getLong("endTime", 0);
if ((currentTime.getMillis() >= startTime)
&& (currentTime.getMillis() <= endTime)) {
//Do stuff here
}
我如何设置职业的时间startTime
和endTime
:
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 16);
startTime.set(Calendar.MINUTE, 00);
editor.putLong("startTime",
startTime.getTimeInMillis());
Calendar endTime = Calendar.getInstance();
endTime.set(Calendar.HOUR_OF_DAY, 16);
endTime.set(Calendar.MINUTE, 00);
endTime.add(Calendar.HOUR_OF_DAY, 11);
editor.putLong("endTime",
endTime.getTimeInMillis());
editor.commit();
但是,这意味着startTime
和endTime
都会附加一个特定的日期。
我希望我解释得很好,感谢任何帮助!
答案 0 :(得分:2)
无需为了您的目的而花费几毫秒的时间。使用毫秒作为日期时间会让人感到困惑和容易出错。
你需要的是一个体面的日期时间库,而不是臭名昭着的捆绑java.util.Date&amp; .Calendar类。
如果您确定要忽略日期并忽略时区,请参阅第三方免费LocalTime
库提供的Joda-Time类的示例代码。
LocalTime start = new LocalTime( 10, 0, 0 );
LocalTime stop = new LocalTime( 14, 30, 0 );
LocalTime target = LocalTime.now();
boolean isNowInSpan = !( ( target.isBefore( target ) ) | ( target.isAfter( stop ) ) );
根据您的业务逻辑需求调整最后一行。你可能想要:
转储到控制台...
System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
System.out.println( "target: " + target );
System.out.println( "isNowInSpan: " + isNowInSpan );
跑步时......
start: 10:00:00.000
stop: 14:30:00.000
target: 23:49:37.779
isNowInSpan: false
时间通常不是正确的方式。当一个新的日期工作时,一个天真的程序员可能首先认为只有时间才能简化事情。相反,这个例子显示了如何全天候旋转会产生复杂性。从长远来看,使用 date + time + timeZone 通常是最好的方法。
LocalTime now = LocalTime.now();
LocalTime start = new LocalTime( 13, 0, 0, 0 );
LocalTime stop = start.plusHours( 11 );
System.out.println( "now: " + now );
System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
if ( now.isAfter( start ) ) {
System.out.println( "After start" );
}
if ( now.isBefore( stop ) ) {
System.out.println( "Before stop" );
}
跑步时......
now: 14:00:32.496
start: 13:00:00.000
stop: 00:00:00.000
After start
Java 8带来了由java.time package定义的Joda-Time启发的新JSR 310。
在java.time中,你会发现一个类似于Joda-Time的LocalTime类。
答案 1 :(得分:1)
没有日期的时间意味着更少。在Java时间戳中,它使用Unix UTC和01/01/1970上的时间戳0开始。所以,startTime / endTime.getTimeInMillis()告诉你与UTC不同的时间。这意味着你的午夜是你的基础,你的endTime.getTimeInMillis()将是偏移量。
Calendar cal = Calendar.getInstance();
// set to mid-night
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long midnight = cal.getTimeInMillis();
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 00);
long startTime = cal.getTimeInMillis();
editor.putLong("startTime", (startTime - midnight));
cal.add(Calendar.HOUR_OF_DAY, 11);
long endTime = cal.getTimeInMillis();
editor.putLong("endTime", (endTime - midnight));
editor.commit();
答案 2 :(得分:1)