Java中整数个月之间的间隔

Java中整数个月之间的间隔,java,datetime,calendar,Java,Datetime,Calendar,我有两个int变量monthFrom和monthUntil,它们代表一个区间。我想写一个方法,可以找出是否有冬季月份与这个时间间隔重叠。例如,如果monthFrom==3,monthfuntil==5,该方法将返回false,如果monthFrom==2,monthfuntil==8-true,如果monthFrom==10,monthfuntil==3-true,等等 作为一名Java初学者,我不知道如何做到这一点。有什么帮助吗?您可以使用如下代码: if (monthFrom <= m

我有两个
int
变量
monthFrom
monthUntil
,它们代表一个区间。我想写一个方法,可以找出是否有冬季月份与这个时间间隔重叠。例如,如果
monthFrom==3
monthfuntil==5
,该方法将返回
false
,如果
monthFrom==2
monthfuntil==8
-
true
,如果
monthFrom==10
monthfuntil==3
-
true
,等等


作为一名Java初学者,我不知道如何做到这一点。有什么帮助吗?

您可以使用如下代码:

if (monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3)
    return false;
else
    return true;
return !(monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3);
if(monthFrom=3)
返回false;
其他的
返回true;
或者,您可以将此代码简化为:

if (monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3)
    return false;
else
    return true;
return !(monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3);
返回!(从3个月开始);

您可以这样使用代码:

if (monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3)
    return false;
else
    return true;
return !(monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3);
if(monthFrom=3)
返回false;
其他的
返回true;
或者,您可以将此代码简化为:

if (monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3)
    return false;
else
    return true;
return !(monthFrom <= monthUntil && monthUntil != 12 && monthFrom >= 3);
返回!(从3个月开始);

给定的规则,给定的代码应产生所需的输出:

public static void main(String[] args){
    isWinter(3,5);
    isWinter(2,8);
    isWinter(10,3);
}

public static void isWinter(int monthFrom, int monthUntil) {
    if(monthFrom <= monthUntil && monthFrom  <  3 || 
       monthFrom >  monthUntil && monthUntil <= 3) {
        System.out.println("Winter time");
    } else {
        System.out.println("Not winter time");
    }
}
该检查适用的规则是:当
monthUntil-monthUntil
monthFrom<3
monthFrom
时为冬季


由于没有明确的定义,我假设规则来自
isWinter(3,5)必须返回
false
isWinter(10,3)必须返回
true

给定的规则,给定的代码应产生所需的输出:

public static void main(String[] args){
    isWinter(3,5);
    isWinter(2,8);
    isWinter(10,3);
}

public static void isWinter(int monthFrom, int monthUntil) {
    if(monthFrom <= monthUntil && monthFrom  <  3 || 
       monthFrom >  monthUntil && monthUntil <= 3) {
        System.out.println("Winter time");
    } else {
        System.out.println("Not winter time");
    }
}
该检查适用的规则是:当
monthUntil-monthUntil
monthFrom<3
monthFrom
时为冬季


由于没有明确的定义,我假设规则来自
isWinter(3,5)必须返回
false
isWinter(10,3)必须返回
true

我知道您是Java初学者,现在想处理一些基础知识。这是一件好事,我鼓励你们继续

尽管如此,您应该避免在更高级的程序中弄乱与时间相关的基本代码。时间是一个微妙的话题,几代程序员花了数小时和数周的时间使它在Java中易于管理。若您已经使用Java8,那个么包中有一个复杂的日期时间API


此外,您可能希望从project中进行检查。它提供了计算时间间隔重叠的方法。

我知道您是Java初学者,现在想掌握一些基础知识。这是一件好事,我鼓励你们继续

尽管如此,您应该避免在更高级的程序中弄乱与时间相关的基本代码。时间是一个微妙的话题,几代程序员花了数小时和数周的时间使它在Java中易于管理。若您已经使用Java8,那个么包中有一个复杂的日期时间API


此外,您可能希望从project中进行检查。它提供了计算区间重叠的方法。

Joe我的代码可以帮助您解决问题。 我使用HashMap集合来存储月份值,因为它包含与值(即月份名称)相对应的固定月份数

在下面找到我的代码

public class FindWinterMonth {
HashMap<Integer, String> months = null;
public FindWinterMonth() {
    months = new HashMap<Integer, String>();
    months.put(10, "October");
    months.put(11, "November");
    months.put(12, "December");
    months.put(1, "January");
    months.put(2, "Febuary");
}

public boolean isWinterMonth(int monthFrom, int monthUntil){
    boolean isPresent = false;
    for(int i = monthFrom; i <= monthUntil; i++){
        if(months.containsKey(i)){
            isPresent = true;
        }
    }
    return isPresent;
}

public static void main(String[] args) {
    FindWinterMonth fm = new FindWinterMonth();
    boolean isWinter = fm.isWinterMonth(4,9);
    System.out.println(isWinter);
}
公共类findwentermonth{
HashMap months=null;
公共财政月{
月份=新HashMap();
月份。卖出(10月10日);
月份。卖出(11月11日);
月份。卖出(12月12日);
月份。卖出(1,“一月”);
月份。投入(2,“二月”);
}
公共布尔值isWinterMonth(int monthFrom,int monthUntil){
布尔值isPresent=false;

对于(int i=monthFrom;iJoe,我的代码可以帮助您解决问题。 我使用HashMap集合来存储月份值,因为它包含与值(即月份名称)相对应的固定月份数

在下面找到我的代码

public class FindWinterMonth {
HashMap<Integer, String> months = null;
public FindWinterMonth() {
    months = new HashMap<Integer, String>();
    months.put(10, "October");
    months.put(11, "November");
    months.put(12, "December");
    months.put(1, "January");
    months.put(2, "Febuary");
}

public boolean isWinterMonth(int monthFrom, int monthUntil){
    boolean isPresent = false;
    for(int i = monthFrom; i <= monthUntil; i++){
        if(months.containsKey(i)){
            isPresent = true;
        }
    }
    return isPresent;
}

public static void main(String[] args) {
    FindWinterMonth fm = new FindWinterMonth();
    boolean isWinter = fm.isWinterMonth(4,9);
    System.out.println(isWinter);
}
公共类findwentermonth{
HashMap months=null;
公共财政月{
月份=新HashMap();
月份。卖出(10月10日);
月份。卖出(11月11日);
月份。卖出(12月12日);
月份。卖出(1,“一月”);
月份。投入(2,“二月”);
}
公共布尔值isWinterMonth(int monthFrom,int monthUntil){
布尔值isPresent=false;
for(int i=monthFrom;我使用对象,而不是数字
使用对象比使用整数更好。这使您的代码更加自我记录,确保有效值,并提供类型安全

月份
Java提供了几个月的类。作为一个例子,该类预先定义了十几个对象,每个月一个,1-12月第1-12个

EnumSet
An是一种特殊的实现,为保存枚举对象进行了优化。
EnumSet
对象的执行速度非常快,内存非常小。使用它可以将“冬季”定义为一组月份

Set<Month> winter = EnumSet.of ( Month.DECEMBER , Month.JANUARY , Month.FEBRUARY );
比较集合 接下来,我们需要知道
范围
集中的任何元素是否在
冬季
集中。不幸的是,
集合
界面中没有任何
包含的方法。我们可以通过多一点代码来获得该行为,创建
冬季
的副本,然后调用
removeAll
来删除包含在
范围
中的任何匹配元素,并最终与原始
冬季
进行比较

Set<Month> winterMonthsNotInRange = EnumSet.copyOf ( winter );
winterMonthsNotInRange.removeAll ( range );

Boolean rangeContainsWinterMonths = (  ! winter.equals ( winterMonthsNotInRange ) ); // If different, the range contained one or more winter months.
冬季:[一月、二月、十二月]
范围:[二月、三月、四月、五月、六月、七月、八月]
冬季月NOTINRANGE:[一月、十二月]
两个月:对
温特蒙特森兰格:[二月]

关于
月份
请记住,这些不仅仅是正在使用的字符串。
Month
对象是结合了数据和方法的真实对象。您在上面的输出中看到的所有大写名称都是由方法生成的字符串对象。您也可以通过方法自动生成以其他语言本地化的字符串,例如
janvier
一月用法语

如果unf