我想知道如何在新对象中使用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;也没什么。
知道我做错了什么?
答案 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)
您正在将String
对象传递给构造函数,但之后尝试将其分配给不同类型的成员变量(Date
)。没有办法。方形钉,圆孔。您必须首先将该文本解析为正确类型的对象。
另一个问题:您正在使用可怕的旧日期时间类Date
,您应该使用现代java.time.LocalDate
类。
LocalDate.of( 1994 , Month.JANUARY , 1 )
我想知道如何在新对象中使用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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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