【问题标题】:String Date Java字符串日期 Java
【发布时间】:2013-06-08 11:10:11
【问题描述】:

//我是java编程新手

我有一个字符串对象,它以这种格式表示日期/时间:“2013-06-09 14:20:00”(yyyy-MM-dd HH:mm:ss)

我想将其转换为 Date 对象,以便对其执行计算,但我对如何执行此操作感到困惑。

我试过了:

String string = "2013-06-09 14:20:00";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string);
System.out.println(date);
//Prints Mon Dec 31 00:00:00 GMT 2012

任何帮助表示赞赏

好的,所以我现在已经将我的代码更新为如下,当我打印日期时,我现在得到了正确的日期/时间,但这是正确的实现吗:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String string = "2013-06-09 14:20:00";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string);
System.out.println(dateFormat.format(date));
//prints 2013-06-09 14:20:00

感谢迄今为止回答/评论的每个人

【问题讨论】:

  • 看看here并阅读YyDd的描述
  • 抱歉,我在写问题的时候打错了,但是当它工作不正确时,我实际上使用了正确的符号
  • @JavaFish 欢迎来到 StackOverflow。看起来您从 correct answer by zzKozak 复制代码并粘贴到您的问题中。没有必要这样做。相反,您应该通过单击“向上”和“向下”投票按钮下方的大空(白色)复选标记来接受该答案。

标签: java date time


【解决方案1】:

格式错误。改用这个:

"yyyy-dd-MM HH:mm:ss"

确实,您的最后一个程序版本是可以的,除了您不需要声明SimpleDateFormat 两次。简单地说:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = "2013-06-09 14:20:00";
Date date = dateFormat.parse(string);
System.out.println(dateFormat.format(date));

【讨论】:

  • 抱歉,我在写问题时打错了,但实际上我使用了正确的符号并且它的工作不正确
【解决方案2】:

String string = "2013-06-09 14:20:00";

DATE 对象格式为“yyyy-dd-MM HH:mm:ss”

您可以通过使用存在于中的 Date 对象来获取日期、日期、月份等等

java.util.Date 包,如下所示。

日期 d = 新日期(字符串);

这将调用 Date 对象的构造函数,您为其传递包含日期的“字符串”变量。

d.getDay(); // 检索特定日期的日期

d.getDate(); // 获取日期

还有更多类似的可用。

【讨论】:

    【解决方案3】:

    使用 java.util.Date

    answer by zzKozak 是正确的。嗯,几乎是正确的。示例代码省略了所需的异常处理。像这样……

    java.text.DateFormat dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String string = "2013-06-09 14:20:00";
    Date date = null;
    try {
        date = dateFormat.parse(string);
    } catch ( ParseException e ) {
        e.printStackTrace();
    }
    System.out.println("date: " + dateFormat.format(date));
    

    不要使用 java.util.Date!

    避免使用与 Java 捆绑在一起的 java.util.Date 和 Calendar 类。它们在设计和实现方面都是出了名的糟糕。

    改为使用合格的日期时间库。在 Java 中,这意味着:

    时区

    您的问题和代码未能解决时区问题。如果您忽略时区,您将获得默认值。在生产中部署时,这可能会导致意外行为。更好的做法是始终指定时区。

    格式化程序

    如果按照标准 ISO 8601 格式将空格替换为“T”,则可以方便地将该字符串直接提供给 Joda-Time DateTime 实例的构造函数。

    如果您必须按原样使用该字符串,则定义一个formatter 来指定该格式。你可以在 StackOverflow.com 上找到很多这样的例子。

    示例代码

    这是一些使用 Joda-Time 2.3 的示例代码,在 Java 7 中运行。

    我随意选择了time zone of Montréal

    // © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
    // import org.joda.time.*;
    // import org.joda.time.format.*;
    
    // Specify a time zone rather than rely on default.
    // Necessary to handle Daylight Saving Time (DST) and other anomalies.
    DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
    
    DateTime dateTime = new DateTime( "2013-06-09T14:20:00", timeZone ); // Or pass DateTimeZone.UTC as time zone for UTC/GMT.
    
    System.out.println( "dateTime: " + dateTime );
    

    运行时……

    dateTime: 2013-06-09T14:20:00.000-04:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多