如何在新Java对象中使用Date类型?

时间:2018-04-23 19:32:33

标签: java

我想知道如何在新对象中使用Date类型?

我会更多地解释一下我的代码:

我有一个叫做的类:

雷齐格:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

主要:

import java.util.Date;

public class Reiziger {
    private String naam;
    private Date gbdatum;

    public Reiziger(String nm, Date gbdtm) {
        this.naam = nm;
        this. gbdatum = gbdtm;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public Date getGBdatum() {
        return gbdatum;
    }

    public void setGBdatum(Date gbdatum) {
        this.gbdatum = gbdatum;
    }

    public String toString() {
        return naam + gbdatum;
    }
}

正如你在我的主要内容中看到的,我尝试了很多东西,只有null正在工作。我想将对象添加为日期 - &gt;例如:01-01-1994但不起作用。

我试过没有&#34; &#34;也没什么。

知道我做错了什么?

5 个答案:

答案 0 :(得分:2)

您的方法被定义为接受Date对象,但是您尝试传入String。 Java不会自动将String转换为Date。

您需要做的是使用 DateFormatter

这使用定义的Date模式将传入的String转换为您要使用的Date对象。

在您的情况下,您可能希望执行与此类似的操作:

String dateFormat = "MM-dd-yyyy";

try {
    DateFormat df = new SimpleDateFormat(dateFormat);
    Date dateToUse = df.parse("01-01-1994");

    // Or this way
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
    LocalDate localDate = LocalDate.parse("01-01-1994", formatter);
} catch (ParseException pe) {
    // Do something
}

以下是Java PI的链接:
SimpleDateFormatter:https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

DateTimeFormatter:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

LocalDate:https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

答案 1 :(得分:1)

TL;博士

您正在将String对象传递给构造函数,但之后尝试将其分配给不同类型的成员变量(Date)。没有办法。方形钉,圆孔。您必须首先将该文本解析为正确类型的对象。

另一个问题:您正在使用可怕的旧日期时间类Date,您应该使用现代java.time.LocalDate类。

LocalDate.of( 1994 , Month.JANUARY , 1 )

java.time

  

我想知道如何在新对象中使用Date类型?

不要。

显然,您想要一个仅限日期的值,因此请使用仅限日期的类而不是日期加时间的类。

此外,从不使用java.util.Date 。它是几年前由 java.time 类取代的麻烦的旧日期时间类的一部分。

LocalDate类表示没有时间且没有时区的仅限日期的值。指定1月至12月的数字1-12或Month枚举类的月份部分。

LocalDate ld = LocalDate.of( 1994 , Month.JANUARY , 1 ) ;

更改您的成员变量:

private Date gbdatum ;

...为:

private LocalDate gbdatum ;

将构造函数更改为:

public Reiziger(String nm, LocalDate gbdtm)

这样称呼:

Reiziger r1 = new Reiziger( 
    "Joost" , 
    LocalDate.of( 1994 , Month.JANUARY , 1 ) 
) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/util/Date.html

Date(String)已弃用。使用Date(Long) 之后使用SimpleDateFormatter new SimpleDateFormatter ("dd-MM-yyyy") ;

答案 3 :(得分:0)

"01-01-1994"创建包含这些内容的String。要创建Date,您需要使用其中一个构造函数。例如,使用默认构造函数

Reiziger r1 = new Reiziger("Joost", new Date());

会奏效。

有关该类的更多信息以及其他构造函数,请参阅the official documentation

然而Date类在这一点上有点老了,正如你从其他答案中看到的那样,正确使用它有点乱,相反我建议使用LocalDate来自{ {1}}包。如果您使用的是该类,则以下内容将创建代表java.time的日期:"01-01-1994"

答案 4 :(得分:0)

我个人建议使用最近的java.time库中的类,但是如果你想使用java.util.Date及其子类并通过String设置日期,那么你可以使用{ {1}}像这样:

SimpleDateFormat