如何根据日期和时间自动标记数组列表中的相关记录?

问题描述

我正在设计一个简单的 covid 19 跟踪系统。每次客户(ArrayList 中的对象)访问 Shop(ArrayList 中的对象)时,系统都会创建存储在 ArrayList 中的 Visits 对象。

超类详细信息。

public class Details {

  private String name;
  private String phoneNumber;
  private Status status;

  // Customer
  public Details(String name,String phoneNumber,Status status) {
    this.name = name;
    this.phoneNumber = phoneNumber;
    this.status = status;
  }

我正在使用 java.time 包来创建日期时间以及像这样的访问对象

public class Visit extends Details {
    
    private String dateTimeFinal;
    private String shopName;
    
    public Visit(String name,String shopName,Status status) {
        super(name,phoneNumber,status);
        this.shopName = shopName;
        LocalDateTime dateTime = LocalDateTime.Now();
        DateTimeFormatter dateTimeFormatted = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
        dateTimeFinal = dateTime.format(dateTimeFormatted);
    }

我的客户类构造函数看起来像这样

public class Customer extends Details {
  
  private String password;

  public Customer (String name,String password,Status status){
    super(name,status);
    this.password = password;
  }

我的商店类构造函数看起来像这样

public class Shop extends Details{

  private String managerName;
  
  public Shop(String name,Status status,String managerName){
    super(name,status);
    this.managerName = managerName;
  }

我在另一个文件中也有一个状态枚举,看起来像这样

public enum Status{
  norMAL,CASE,CLOSE    
}

我现在想要完成的是,如果一个标记为 CASE 的客户访问了一家商店,那么在之前和之后的 1 小时时间范围内也访问该商店的所有客户都会自动标记为密切接触者(关)。我还想知道如何创建不是 localdatetime.Now 的时间和日期,因为我需要生成访问来测试标记算法是否有效。

解决方法

使用 LocalDateTime.of() 方法之一(找到 here)创建特定时间。

为了跟踪可能的标志,一种解决方案是跟踪 Visit 的最后一个有风险的 Shop,并且每次对该 Shop 进行新访问时检查它是否足够新,如果是,则更新 StatusVisitShopCustomer。使用 LocalDateTime.minusHours() 比较时间。