【问题标题】:How to convert Date using SimpleDate Format?如何使用 SimpleDateFormat 转换日期?
【发布时间】:2013-06-24 11:37:24
【问题描述】:

在我的 Java 应用程序中,我使用的是 Mysql,它以 yyyy-MM-dd hh:mm:ss 的格式返回日期。虽然我需要dd-MM-yyyy hh:mm a 的格式。转换确实发生在 Hibernate VO 类中。

为此,我这样做:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATED_DATE")
private Date createdDate = new Date();

public Date getCreatedDate() {
    Date date = null;
    try {
        date = new SimpleDateFormat("dd/MM/yyyy hh-mm a")
                .parse(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(createdDate));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
}

public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}

但它确实给出了 Parse 异常。

java.text.ParseException: Unparseable date: "2013-05-06 01:39:00"
    at java.text.DateFormat.parse(DateFormat.java:354)
    at com.sits.ec.valueObjects.MessageBoxVO.getCreatedDate(MessageBoxVO.java:64)

谁能给我一个建议?

【问题讨论】:

    标签: java mysql hibernate date


    【解决方案1】:

    尝试:

    import java.util.*;
    import java.text.*;
    
    public class Example {
        public static void main(String[] args) {
            Date now = new Date();
            SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a")
            String s = df.format(now);
            System.out.println("Today is: " + s);
        }
    }
    

    【讨论】:

    • 这是一个简单的将日期转换为字符串但我想要日期到日期但我自己的格式...
    • @java 对象 Date 没有指定格式,它只将时间量存储在 Long 变量中。它是客户端的一部分,它将可视化该日期以定义格式。
    【解决方案2】:

    这就是您的代码的根本错误:它接受 Date 并返回 DateDate 与字符串无关,它代表一个绝对的时间瞬间。如果您至少正确掌握了外部 API,我们或许可以提出一个实现方案。

    【讨论】:

    • 是的,我想要日期到日期,但第一个日期是其他格式,第二个日期是其他格式..
    • 正如我所指出的,Date 没有任何格式,它是您可以从System.currentTimeMillis() 获得的long 值的包装。您的请求无异于请求int,它具有相同的值但“格式不同”。
    【解决方案3】:

    试试这个:

    String time=new SimpleDateFormat("yyyy.MM.dd").format(Calendar.getInstance().getTime());
    

    【讨论】:

      【解决方案4】:

      首先,你为什么要格式化一个日期并再次解析它以取回日期对象?您可以直接使用实际的日期对象。

      其次,您使用format1 格式化日期,然后尝试使用format2 解析它,这与format1 不同。因此,ParseException.

      这就是你需要的。

      public Date getCreatedDate() {
          return createdDate;
      }
      

      【讨论】:

      • 如果我们直接返回 createDate 对象,它会像.. yyyy-MM-dd hh:mm:ss 格式但我想要 'dd/MM/yyyy hh-mm a' 这种格式
      • Date 没有格式。您只能以您需要的格式获得String 表示。您要么获得所需格式的 String,要么获得 Date 对象。
      • Date to Date - 绝对没有意义,因为您可以格式化 Date 对象。您只能以您需要的格式获得该Date 对象的String 表示!
      【解决方案5】:

      因为您正在尝试将 yyyy-MM-dd hh:mm:ss 日期格式的字符串表示形式解析为 dd/MM/yyyy hh-mm a 日期格式。您希望它如何工作?

      表示必须匹配。

      【讨论】:

        【解决方案6】:

        仅试用
        String dateString = new SimpleDateFormat("dd-MM-yyyy hh:mm a").format(createdDate);
        没有什么需要的了。

        【讨论】:

          【解决方案7】:

          return createdDate; 就是你所需要的。

          Date 对象格式化为String,然后将String 解析回Date 对象是没有意义的。

          顺便说一句,如果您对解析和格式化操作使用相同的格式模式,它会起作用。

          更新:如果您希望日期为格式化字符串,您可以使用:

          public String getCreatedDateAsString() {
              return new SimpleDateFormat("dd-MM-yyyy hh:mm a").format(createdDate);
          }
          

          java.util.Date 仅表示自格林威治标准时间 1.1.1980 以来的一毫秒时间,对时间格式和类似的东西一无所知。

          【讨论】:

          • 它的toString 方法确实会产生某种格式的日期(不是很相关,但会使您的陈述不真实)。
          猜你喜欢
          • 2015-08-05
          • 2012-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多