当前位置: 首页 > 知识库问答 >
问题:

如何声明日期类型的变量并根据日期进行排序?

巫马嘉祯
2023-03-14

我有一个事务类,其中有到达日期、离开日期等变量,我不确定如何定义日期数据类型,因此必须根据开始日期对事务信息进行排序。

public class Transaction implements Comparable<Transaction> 
{
    private Dog dogID;
    private Date startDate;
    private Date departureDate;
    private List<Integer> serviceLevel = Arrays.asList(1,2,3);
    private List<Integer> ratePerDay = Arrays.asList(89,129,149);
    private double totalcharge;
    private double deposit; 
}

共有1个答案

冯奇思
2023-03-14

只使用java.time类,不要使用遗留的Date类。

@Override
public int compareTo( Transaction other )
{
    return this.startDate().compareTo( other.startDate()
}

Java附带的Date类都很糟糕,设计糟糕的人不了解日期时间处理。

如果您只想要一个日期,不需要一天中的时间,也不需要时区的上下文或UTC的偏移量,请使用java。时间LocalDate

private LocalDate startDate;
private LocalDate departureDate;

如果类的主要目的是以透明和不变的方式传输数据,请将类定义为记录。编译器隐式地创建构造函数getter,equals

在精度很重要的情况下,如力矩,切勿使用浮点类型,如double。使用BigDecimal,准确度高于速度。

为清楚起见,列表通常应以复数形式命名。

Java命名约定就是这样。所以totalCharge

public record Transaction
(
    Dog dogID , 
    LocalDate startDate , 
    LocalDate departureDate , 
    List<Integer> serviceLevels , 
    List<Integer> ratesPerDay , 
    BigDecimal totalCharge , 
    BigDecimal deposit
) {}

如果您通常希望按开始日期成员字段进行排序,请使用其所需的方法compareTo来实现可比较接口。我们通过调用内置于LocalDate类中的compareTo方法来实现该方法。

public record Transaction implements Comparable < Transaction > 
(
    Dog dogID , 
    LocalDate startDate , 
    LocalDate departureDate , 
    List<Integer> serviceLevels , 
    List<Integer> ratesPerDay , 
    BigDecimal totalCharge , 
    BigDecimal deposit
) 
{
    @Override
    public int compareTo( Transaction other )
    {
        return this.startDate().compareTo( other.startDate()
    }

}
 类似资料:
  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序

  • 我试图创建一个小应用程序来保存许可证数据,我允许用户输入赎回日期和许可证长度。 我想创建一天的剩余字段,用户可以在其中查看他们在赎回新许可证之前还有多少天。 我用过jxDatepicker 并且有三个组合框,用户可以在其中选择许可证可用的年、月和日数 编辑 我想我让一些人很困惑。或者我不明白这怎么能解决我的问题。我会试着更详细地描述 脚本 用户可以使用该应用程序记录他们的许可证,他们输入许可证兑换

  • 问题内容: 我有下表的人和他们的生日: 而且我不知道如何根据生日离今天有多近来对名字进行排序。因此,对于NOW()= 2011-09-08,排序结果应为: 我正在寻找一个快速的技巧,并不真正在意性能(宠物项目-表将容纳少于1000条记录),但是当然每个建议都会受到赞赏。 问题答案: 这是一种方法: 计算 当前年份 - 出生年份 将得出的年数加上 出生日期 您现在有今年的生日,如果这个日期过去了,再

  • 问题内容: 我正在尝试根据创建日期读取最新的10个文件。 我尝试了此代码,但是它不能用,我的意思是,每当我添加新文件时,它都不会在输出中显示新文件名。 我什至尝试了apache commons io,但这也不起作用(这意味着在该目录中创建新文件时,不显示新文件) 这是我的Apache Commons io版本 问题答案: 尝试翻转比较顺序: 这对我来说仅适用于本地测试。

  • 问题内容: 如何对日期和/或日期时间对象列表进行排序?接受的答案在这里是不是为我工作: 问题答案: 你得到,因为它运行 在原地 ,这意味着它不返回任何东西,但修改列表本身。您只需要呼叫而无需再次分配。 有一个内置函数,该函数返回列表的排序版本-也会执行您想要的操作。