繁体   English   中英

Java类型:表示类型为Date的变量的格式是什么? `Time`?

[英]Java Types: What is the format for representing a variable of type `Date`? `Time`?

我有一个变量:

Date date;
Time time;

和方法:

MyDateMethod(Date date){
//do stuff
}

MyTimeMethod(Time time){
//do stuff
}

我尝试通过以下调用使用MyDateMethod()

MyDateMethod(1995-03-7);

我收到一条错误消息,说我期望它为类型Time时提供了int类型。

我还尝试通过以下调用使用MyTimeMethod()

MyTimeMethod(03:04:55);

我收到一条错误消息,指出Type mismatch: Cannot convert type int to boolean.

放入这些不同类型的变量的格式是什么? Date显然不是xxxx-xx-xxTime显然不是xx:xx:xx

有几种选择,

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date d = sdf.parse("1995-03-07");
    System.out.println(d);
} catch (ParseException e) {
    e.printStackTrace();
}

输出是

    Tue Mar 07 00:00:00 EST 1995

或者,您可以使用

// -1 because January is 0... I didn't design it!
Calendar c = new GregorianCalendar(1995, 3 - 1, 7);
System.out.println(c.getTime());

具有与以前相同的输出。

您需要SimpleDateFormat。 需要按日期格式进行初始化。

像这样使用它:

SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy/MM/dd HH:mm:ss", Locale.getDefault());

接着:

 Date date = (Date) dateFormat.parse("2014/04/02 22:22:22");

看一下DateFormat ,尤其是SimpleDateFormat

您的示例将使用SimpleDateFormat这样编码:

Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1995-03-07")

(我假设您在这里还有几天,如果没有,则需要将MM和dd互换)。

Java不支持Date文字。 您需要使用构造函数或静态工厂方法来获取此类的实例。

1995-03-07返回1985因为这里有三个int文字,并且连字符被解释为减法运算符。

看一下DateDateFormat的文档

您可以通过以下方式表示这些值:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("1995-03-07");

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
Date time = timeFormat.parse("03:46:16");

您可以使用相同格式的对象来执行相反的转换。 请注意,这些Date实例代表一个特定的时间,精确到毫秒。 在内部,这表示为格林尼治标准时间1970年1月1日00:00:00以来的毫秒数

该API并不是Java中最漂亮的API,通过查看文档,您可以了解到它进行了多少更改。 只看不推荐使用的方法的数量。

建议改用Joda-Time库

另外,如果您可以选择使用Java 8,则可以尝试使用随附的全新API。

汤姆答案是正确的。 Java中没有日期时间文字

而且正如他所说,旧的捆绑在一起的java.util.Date和.Calendar类非常麻烦。 避免他们。 在Java 8中使用Joda-Time库或新的java.time包。

乔达时间

在Joda-Time中:

  • 如果只需要一个没有时间和时区的日期,请使用LocalDate类。
  • 类似地,在忽略时区和日期时仅使用时间,请使用LocalTime类。
  • 但是大多数情况下,您可能需要使用DateTime类,该类在一个对象中都跟踪日期,时间和时区。

日期时间不是文本

一个DateTime对象包含文本。 没有字符串。 如果需要字符串表示形式,请使用格式化程序对象生成一个。 在StackOverflow中搜索许多示例。

Joda-Time内置了格式化程序,用于明智且日益普及的ISO 8601标准。 例如,DateTime类上的toString实现产生这样的String……

2014-04-01T20:17:35-08:00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM