日期范围 java_java – 日期范围中的日期范围

花了我相当多的时间来捣乱…好吧,时间……我可以告诉你,我宁愿让其他人为我做这项工作.

为此,如果你愿意试试,我会看看JodaTime

基本上,这个例子创建了一系列间隔.一个是“时期”,或一年中的一周(从星期一开始到星期日结束).

一个间隔是一个重叠间隔,跨越“周期”前一周和一周后,另一个是“周期”内的单日间隔

import org.joda.time.Interval;

import org.joda.time.MutableDateTime;

import org.joda.time.Period;

import org.joda.time.format.DateTimeFormat;

import org.joda.time.format.DateTimeFormatter;

import org.joda.time.format.DateTimeFormatterBuilder;

import org.joda.time.format.DateTimeParser;

public class TestTimeInterval {

public static void main(String[] args) {

DateTimeFormatter formatter = new DateTimeFormatterBuilder().

appendDayOfMonth(2).appendLiteral(" ").

appendDayOfWeekText().appendLiteral(" ").

appendMonthOfYearText().appendLiteral(" ").

appendYear(2, 2).

toFormatter();

// Last week

MutableDateTime targetStart = MutableDateTime.now();

targetStart.setDayOfWeek(1);

targetStart.addDays(-6);

// Next week

MutableDateTime targetEnd = MutableDateTime.now();

targetEnd.setDayOfWeek(7);

targetEnd.addDays(7);

System.out.println("Target range = " + formatter.print(targetStart) + " to " + formatter.print(targetEnd));

Interval targetInterval = new Interval(targetStart, targetEnd);

// This week

MutableDateTime start = MutableDateTime.now();

start.setDayOfWeek(1);

MutableDateTime end = MutableDateTime.now();

end.setDayOfWeek(7);

Interval interval = new Interval(start, end);

System.out.println("Interval range = " + formatter.print(start) + " to " + formatter.print(end));

System.out.println("Contains interval = " + targetInterval.contains(interval));

// Last week

targetStart = DateTime.now();

// Next week

targetEnd = DateTime.now();

System.out.println("Target range = " + formatter.print(targetStart) + " to " + formatter.print(targetEnd));

targetInterval = new Interval(targetStart, targetEnd);

System.out.println("Contains interval = " + interval.contains(targetInterval));

}

}

哪个输出……

Target range = 10 Tuesday December 2013 to 29 Sunday December 2013

Period range = 16 Monday December 2013 to 22 Sunday December 2013

Contains period = true

Target range = 19 Thursday December 2013 to 19 Thursday December 2013

Contains period = true

你最终只需要以两种方式检查周期间隔.

>检查“周期”是否在提供的间隔内

>如果提供的Interval在“期间”内……

例如…

if (period.contains(interval) || interval.contains(period)) {

// Match...

}

现在,还有很多其他的事情要考虑,比如,如果时间间隔不重要,你会想要将时间归零(开始时间应该是午夜/早上,结束时间应该是午夜)所以你最大限度地捕获区域

更新了更好地使用JodaTime库

@BasilBourque能够突出显示原始示例中的一些问题,我已对其进行了更新和测试.谢谢@BasilBourque

虽然与原始类似,但它更好地使用JodaTime库

public static void newWay() {

DateTimeFormatter formatter = new DateTimeFormatterBuilder().

appendDayOfMonth(2).appendLiteral(" ").

appendDayOfWeekText().appendLiteral(" ").

appendMonthOfYearText().appendLiteral(" ").

appendYear(2, 2).

toFormatter();

// Last week

DateTime targetStart = DateTime.now(DateTimeZone.getDefault()).

withDayOfWeek(DateTimeConstants.MONDAY).

minusDays(6);

//MutableDateTime targetStart = MutableDateTime.now();

//targetStart.setDayOfWeek(1);

//targetStart.addDays(-6);

// Next week

DateTime targetEnd = DateTime.now(DateTimeZone.getDefault()).

withDayOfWeek(DateTimeConstants.SUNDAY).

plusDays(7);

//MutableDateTime targetEnd = MutableDateTime.now();

//targetEnd.setDayOfWeek(7);

//targetEnd.addDays(7);

System.out.println("Target range = " + formatter.print(targetStart) + " to " + formatter.print(targetEnd));

Interval targetInterval = new Interval(targetStart, targetEnd);

// This week

DateTime start = DateTime.now(DateTimeZone.getDefault()).

withDayOfWeek(DateTimeConstants.MONDAY);

//MutableDateTime start = MutableDateTime.now();

//start.setDayOfWeek(1);

DateTime end = DateTime.now(DateTimeZone.getDefault()).

withDayOfWeek(DateTimeConstants.SUNDAY);

//MutableDateTime end = MutableDateTime.now();

//end.setDayOfWeek(7);

Interval interval = new Interval(start, end);

System.out.println("Period range = " + formatter.print(start) + " to " + formatter.print(end));

System.out.println("Contains period = " + targetInterval.contains(interval));

// Last week

targetStart = DateTime.now();

// Next week

targetEnd = DateTime.now();

System.out.println("Target range = " + formatter.print(targetStart) + " to " + formatter.print(targetEnd));

targetInterval = new Interval(targetStart, targetEnd);

System.out.println("Contains period = " + interval.contains(targetInterval));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值