Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现一个返回“0”的方法;“每周数据”;_Java - Fatal编程技术网

Java 实现一个返回“0”的方法;“每周数据”;

Java 实现一个返回“0”的方法;“每周数据”;,java,Java,在我的应用程序中,我实现了几种返回与一周周期相关的数据的服务方法 因此,我有几种类似于getDataByDateInterval(Date from,Date to)的方法,但实际上我需要始终检索一周的数据:从周一到周日(或者周日到周六,如果您愿意的话) 在这种情况下,使用带有单个Date参数的方法,然后计算周日期跨度是否更正确 我想找到一种优雅而正确的方法来实现这些方法。我认为实现这一点的最佳方法是链接您的方法: getDataByDateInterval(Date from, Date to

在我的应用程序中,我实现了几种返回与一周周期相关的数据的服务方法

因此,我有几种类似于
getDataByDateInterval(Date from,Date to)
的方法,但实际上我需要始终检索一周的数据:从周一到周日(或者周日到周六,如果您愿意的话)

在这种情况下,使用带有单个
Date
参数的方法,然后计算周日期跨度是否更正确


我想找到一种优雅而正确的方法来实现这些方法。

我认为实现这一点的最佳方法是链接您的方法:

getDataByDateInterval(Date from, Date to) {
    //...
}

getDataByWeek(Date to) {
    // Calculate 'from' date (minus 7 days)
    return getDataByDateInterval(from, to);
}

这种方法可以保持界面清晰,但可以防止违反DRY原则。

我喜欢@JamesB方法,但实际的日期计算可以使用
Joda

import org.joda.time.DateTime;
public class Test {

    public static void main(String[] args) {

        DateTime today = new DateTime();
        DateTime nextWeek = today.plusWeeks(1);
        DateTime lastWeek = today.minusWeeks(1);
        System.out.println("Last Week: " + lastWeek.toString("MM/dd/yyyy"));
        System.out.println("Today: " + today.toString("MM/dd/yyyy"));
        System.out.println("Next Week: " + nextWeek.toString("MM/dd/yyyy"));

    }
}
这将产生:

Last Week: 07/22/2014
Today: 07/29/2014
Next Week: 08/05/2014

我使用Guava的
range
类成功地处理了日期范围查询。有一段时间,我尝试创建像
getDataByDateInterval(Date from,Date to)
这样的方法,但是使用这些方法很麻烦,特别是跟踪
from
to
在任何特定情况下应该是包含的还是独占的

我在项目中大量使用了两个接口,
Dated
DatedLookup

public interface Dated {
    public LocalDate getDate();
}

public interface DatedLookup<T extends Dated> {
    public List<T> queryRange(Range<LocalDate> range);
}

你需要(和可怕的和)来自,来自(或在)。这两个库为几乎所有项目添加了非常有用的功能。如果你不使用它们,你就是在削弱自己。

看起来是这样的,
Weeks
很有用,但它只不过是一个整数(周数)的包装而已。不确定它是否适用于这里。非常有用,谢谢。这个计算对于Joda时间来说是微不足道的:
new LocalDate()。减去(Weeks.ONE)
@dimo414,而我是Joda(和另一张海报中提到的番石榴)的忠实粉丝,问题更多地涉及类/接口设计,而不是日期计算的底层实现。总的来说,我的评论不是批评,只是提供了一种可能的方法来“计算”日期(减去7天)”。@dimo414很抱歉造成混淆。我不认为这是批评。进一步解释为什么我不打算编辑我的答案以包含实现细节。同意,不需要在高级答案中包含一个可能的实现细节。除非您有意使用时间和时区(通常,您不想这样做),否则对于日期数学和其他问题,您应该更喜欢使用
LocalDate
“抽象”日期操作。如果确实要处理时间和时区,则可能需要添加一个调用,以将时间设置为一天中的第一个时刻(通常
00:00:00.000
,但不总是如此)。
public class MyClass<T> imlements DatedLookup<T> {
  // We know there's no data outside this range
  private static final Range<LocalDate> MAX_RANGE = 
      Range.closed(new LocalDate(2010,1,1), new LocalDate());

  @Override
  public List<T> queryRange(Range<LocalDate> range) {
    // range could be Range.all(), meaning it has no bounds
    range = MAX_RANGE.intersection(range);
    // now we guarenteee range has bounds, and can safely call
    LocalDate start = range.lowerEndpoint();
    ....
  }

  // We can also define useful wrappers, like
  public List<T> queryOneWeekBack(LocalDate lastDay) {
    return queryRange(Range.openClosed(lastDate.minus(Weeks.ONE), lastDay);
  }
}