我怎样才能同时使用 org.joda.time.LocalDate 和 java.time.LocalDate;

How can i use org.joda.time.LocalDate and java.time.LocalDate at the same time;

我正在练习如何处理日期。但是当我想使用 javafx 日期选择器时,我卡住了。因为它只适用于 java.time.LocalDate 我正在尝试这样的事情。

    // here i import java.time.LocalDate to get the date from the datepicker;

    LocalDate dueDate = datepickerInvoiceDueDate.getValue();  
    int year = dueDate.getYear();
    int month = dueDate.getMonthValue();
    int day = dueDate.getDayOfMonth();

    //but here i want to import org.joda.time.LocalDate;

    LocalDate dueDatejt = new LocalDate(year, month, day);

有解决办法吗? 是否可以将 Localdate(joda 时间)存储在 mysql 数据库中?

我找到了一个临时修复方法,但我认为这不是正确的方法?

    java.time.LocalDate dueDate = datepickerInvoiceDueDate.getValue();  
    int year = dueDate.getYear();

    int month = dueDate.getMonthValue();
    int day = dueDate.getDayOfMonth();
    //import org.joda.time.LocalDate;
    LocalDate dueDatejt = new LocalDate(year, month, day);

我认为你的 "temporary fix" 中的 LocalDate dueDatejt = new LocalDate(year, month, day); 是正确的代码。

如果你想要一些更明确的方法,我建议去掉 Joda 时间日期,因为新的 java 8 日期已经由 Joda time 的创建者实现,你会发现是一样的API.

中的功能非常相似

关于将日期插入数据库,你可以插入任何类型的日期,前提是你在之前将它们转换为java.sql.Date(或java.sql.Timestamp/java.sql.Time) .

对于标准 java.time.LocalDate,您可以这样做:java.sql.Date sqlDate = java.sql.Date.valueOf(dueDate);

两个库的作者在 Joda-Time-website 上写道:

Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

很明显,您应该使用解决方法来完全限定 Joda-Time 的 class 名称,仅作为临时解决方案。相反,官方建议是在 Java-8 平台上迁移。

虽然通常没有 1:1-迁移(需要一些努力!),但 Joda-Time 在实际开发中将不再存在(放弃许多新功能,只是错误修复)这一事实是一个移民的有力论据。支持迁移的另一个有力论据是 Joda-Time 与 Java-8 缺少互操作性。作者原本计划支持像 TemporalAccessor 这样的低级接口,但后来放弃了(可能是因为缺乏资源)。这个概念是什么意思?互操作性的具体示例(抛开编写完全限定的 class 名称这个令人讨厌的事实):

有了 TemporalAccessor-支持你可以写:

org.joda.time.LocalDate joda = new org.joda.time.LocalDate(year, month, day);
java.time.LocalDate date = java.time.LocalDate.from(joda);

但实际上你必须写:

org.joda.time.LocalDate joda = new org.joda.time.LocalDate(year, month, day);
java.time.LocalDate date = java.time.LocalDate.of(joda.getYear(), joda.getMonthOfYear(), joda.getDayOfMonth());

所以很明显,在您的应用程序中同时支持这两个库并不是一个好主意。