如何声明日期类型的变量并根据日期排序?
How to declare the variables which are of date type and to sort based on the date?
我有交易 class,其中有到达日期、离开日期等变量,我不确定如何定义日期数据类型,因此必须根据开始日期对交易信息进行排序。我想以明确的方式将日期提供给 class。例如,我想给出 5 个日期并对其进行排序。你能告诉我怎么做吗?
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;
}
tl;博士
仅使用 java.time classes,从不使用遗留 Date
class.
实现Comparable
接口需要的一个方法。
@Override
public int compareTo( Transaction other )
{
return this.startDate().compareTo( other.startDate()
}
详情
Date
class 都包含在 Java 中 很糟糕 ,由不懂的人设计的很糟糕 date-time处理。
如果您只需要日期,没有时间,没有时区或 offset-from-UTC 的上下文,请使用 java.time.LocalDate
。
private LocalDate startDate;
private LocalDate departureDate;
如果您的 class 的主要目的是透明且不变地传递数据,请将 class 定义为记录。编译器隐式创建构造函数、getter、equals
& hashCode
和 toString
.
永远不要使用像 double
这样的 floating-point 类型,因为准确性很重要,例如力矩。在准确性胜过速度的地方使用 BigDecimal
。
为清楚起见,列表通常应以复数形式命名。
Java 命名约定为驼峰式。所以 totalCharge
.
public record Transaction
(
Dog dogID ,
LocalDate startDate ,
LocalDate departureDate ,
List<Integer> serviceLevels ,
List<BigDecimal> ratesPerDay ,
BigDecimal totalCharge ,
BigDecimal deposit
) {}
如果您希望通常按开始日期成员字段排序,请使用一个必需的方法 compareTo
实现 Comparable
接口。我们通过调用 LocalDate
class.
中内置的 compareTo
方法来实现该方法
public record Transaction implements Comparable < Transaction >
(
Dog dogID ,
LocalDate startDate ,
LocalDate departureDate ,
List<Integer> serviceLevels ,
List<BigDecimal> ratesPerDay ,
BigDecimal totalCharge ,
BigDecimal deposit
)
{
@Override
public int compareTo( Transaction other )
{
return this.startDate().compareTo( other.startDate()
}
}
我有交易 class,其中有到达日期、离开日期等变量,我不确定如何定义日期数据类型,因此必须根据开始日期对交易信息进行排序。我想以明确的方式将日期提供给 class。例如,我想给出 5 个日期并对其进行排序。你能告诉我怎么做吗?
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;
}
tl;博士
仅使用 java.time classes,从不使用遗留 Date
class.
实现Comparable
接口需要的一个方法。
@Override
public int compareTo( Transaction other )
{
return this.startDate().compareTo( other.startDate()
}
详情
Date
class 都包含在 Java 中 很糟糕 ,由不懂的人设计的很糟糕 date-time处理。
如果您只需要日期,没有时间,没有时区或 offset-from-UTC 的上下文,请使用 java.time.LocalDate
。
private LocalDate startDate;
private LocalDate departureDate;
如果您的 class 的主要目的是透明且不变地传递数据,请将 class 定义为记录。编译器隐式创建构造函数、getter、equals
& hashCode
和 toString
.
永远不要使用像 double
这样的 floating-point 类型,因为准确性很重要,例如力矩。在准确性胜过速度的地方使用 BigDecimal
。
为清楚起见,列表通常应以复数形式命名。
Java 命名约定为驼峰式。所以 totalCharge
.
public record Transaction
(
Dog dogID ,
LocalDate startDate ,
LocalDate departureDate ,
List<Integer> serviceLevels ,
List<BigDecimal> ratesPerDay ,
BigDecimal totalCharge ,
BigDecimal deposit
) {}
如果您希望通常按开始日期成员字段排序,请使用一个必需的方法 compareTo
实现 Comparable
接口。我们通过调用 LocalDate
class.
compareTo
方法来实现该方法
public record Transaction implements Comparable < Transaction >
(
Dog dogID ,
LocalDate startDate ,
LocalDate departureDate ,
List<Integer> serviceLevels ,
List<BigDecimal> ratesPerDay ,
BigDecimal totalCharge ,
BigDecimal deposit
)
{
@Override
public int compareTo( Transaction other )
{
return this.startDate().compareTo( other.startDate()
}
}