Java 确定时间是满还是半小时

Java 确定时间是满还是半小时,java,date,datetime,Java,Date,Datetime,我正在设置一个日期实例,如下所示: Calendar date = Calendar.getInstance(); date.set(2015, 9, 25, 12, 0); 在这种情况下,我知道它是12:00,一个完整的小时,但我也有动态输入日期参数的情况,所以我想确定该日期是完整的还是半小时 例如,对于12:00和12:30它将返回true,而对于12:23它将返回false 我从另一个答案中尝试了timeInMillis%36000000,但没有成功。您的思路正确,只是使用了错误的值。以

我正在设置一个日期实例,如下所示:

Calendar date = Calendar.getInstance();
date.set(2015, 9, 25, 12, 0);
在这种情况下,我知道它是12:00,一个完整的小时,但我也有动态输入日期参数的情况,所以我想确定该日期是完整的还是半小时

例如,对于
12:00
12:30
它将返回
true
,而对于
12:23
它将返回false


我从另一个答案中尝试了
timeInMillis%36000000
,但没有成功。

您的思路正确,只是使用了错误的值。以毫秒计,它将是1800000。(但请看建议这不是一个好主意。)我会得到会议记录并使用
%30==0

免费会议记录示例:()

for(int n=0;n<60;++n){

System.out.println(n+(n%30==0?您的思路是正确的,只是使用了错误的值。以毫秒计,它将是1800000。(但请参阅建议,这不是一个好主意。)我将获得分钟数并使用
%30==0

免费会议记录示例:()

for(int n=0;n<60;++n){

System.out.println(n+(n%30==0?使用get minutes检查分钟数

int minutes = date.get(Calendar.MINUTE); // gets the minutes
return (minutes == 0 || minutes == 30);

使用get minutes检查会议记录

int minutes = date.get(Calendar.MINUTE); // gets the minutes
return (minutes == 0 || minutes == 30);
java.time 您可以让Java为您完成这项工作。使用Java.time框架查询日期时间值,以分钟、秒和秒的分数表示

ZonedDateTime now = ZonedDateTime.now ( ZoneId.of ( "America/Montreal" ) );
// If the value has any seconds or fraction of a second, we know this is neither full hour nor half hour.
if ( ( now.getSecond () != 0 ) || ( now.getNano () != 0 ) ) {
    System.out.println ( "now: " + now + " is neither full nor half hour, because of seconds or fraction-of-second." );
    return;
}
int minuteOfHour = now.getMinute ();
switch ( minuteOfHour ) {
    case 0:
        System.out.println ( "now: " + now + " is full hour." );
        break;
    case 30:
        System.out.println ( "now: " + now + " is half hour." );
        break;
    default:
        System.out.println ( "now: " + now + " is neither full nor half hour." );
        break;
}
与早期版本的java捆绑在一起的java.util.Date/.Calendar类是出了名的麻烦,应该避免使用。java.time框架取代了它们。

java.time 您可以让Java为您完成这项工作。使用Java.time框架查询日期时间值,以分钟、秒和秒的分数表示

ZonedDateTime now = ZonedDateTime.now ( ZoneId.of ( "America/Montreal" ) );
// If the value has any seconds or fraction of a second, we know this is neither full hour nor half hour.
if ( ( now.getSecond () != 0 ) || ( now.getNano () != 0 ) ) {
    System.out.println ( "now: " + now + " is neither full nor half hour, because of seconds or fraction-of-second." );
    return;
}
int minuteOfHour = now.getMinute ();
switch ( minuteOfHour ) {
    case 0:
        System.out.println ( "now: " + now + " is full hour." );
        break;
    case 30:
        System.out.println ( "now: " + now + " is half hour." );
        break;
    default:
        System.out.println ( "now: " + now + " is neither full nor half hour." );
        break;
}

与早期版本的java捆绑在一起的java.util.Date/.Calendar类是出了名的麻烦,应该避免。java.time框架取代了它们。

检查分钟数是30还是0?检查分钟数是30还是0?两者之间有两个细微的区别:如果从历元开始计算毫秒数,就不会有acco未测试自1970年以来可能已插入日历中的任何闰秒。虽然这在未来多年的实践中不太可能产生差异,但另一个更相关的差异是日历是本地化的,并且由于某些时区不使用30分钟的倍数作为其与UTC的时间偏移,您可能会得到一个ve我有不同的结果。@biziclop:谢谢,非常有用。因此,我的收获是:用我的第一个例子(分钟)。:-)这取决于你想要实现什么。但意识到我们计时的奇怪之处是很好的,特别是对于像OP这样热衷于开发移动软件的人来说,这可以真正在尼泊尔这样的地方使用(UTC+5:45)这两者之间有两个微妙的区别:如果你从历元开始计算毫秒,你就不会考虑自1970年以来可能在日历中插入的任何闰秒。虽然这在未来多年的实践中不太可能产生影响,但另一个更相关的区别是日历是本地化的d由于某些时区不使用30分钟的倍数作为其与UTC的时间偏移,您可能会得到一个非常不同的结果。@biziclop:谢谢,非常有用。因此这里的要点是:使用我的第一个示例(分钟)。:-)这取决于你想要实现什么。但了解我们计时的奇怪之处是很好的,特别是对于像OP这样热衷于开发移动软件的人来说,这可以真正在尼泊尔这样的地方使用(UTC+5:45)。感谢@biziclop在评论中首先指出这一点,感谢你给出了实际的代码!@AmarSyla:我的回答还有几分钟就要开始了,只是为了记录在案。:-)如果是我的话,我想我会用这个
|
而不是
%
,不过,我只是想出于某种原因,你想用
%
@T.J.Crowder。我真的希望我能选择一个以上的正确答案。我不是一个有经验的程序员,你的方法可能比这个更好,但这看起来更干净。谢谢你们两位你。@AmarSyla:对不起,我可能不清楚上面的内容:我也会选择这种方法,而不是像我的回答中那样使用
%
:-)我只是在标记biziclop没有“先”显示分钟数。(骄傲,phah。)感谢@biziclop在评论中首先指出这一点,感谢你给出了实际的代码!@AmarSyla:我的回答还有几分钟就要开始了,只是为了记录在案。:-)如果是我的话,我想我会用这个
|
而不是
%
,不过,我只是想出于某种原因,你想用
%
@T.J.Crowder。我真的希望我能选择一个以上的正确答案。我不是一个有经验的程序员,你的方法可能比这个更好,但这看起来更干净。谢谢你们两位你。@AmarSyla:对不起,我可能不清楚上面的内容:我也会选择这种方法,而不是像我的回答中那样使用
%
:-)我只是在标记biziclop没有“先”显示分钟数。(骄傲,phah。)