java日期格式问题

时间:2016-02-11 20:35:45

标签: java date

我有一个采用日期并将其转换为长整数的方法。

        Map<String, Object> row = new HashMap<>();
    for (int i = 0; i < columns.size(); i++) {

        String colName = columns.get(i);

        if ("productionDate".equals( colName )) {
            row.put(colName, ((Date) obj[i]).getTime());
        } else {
            row.put(columns.get(i), obj[i]);
        }

我知道这条线正在改变格式,我正在寻找一种方法将其转换为MM-DD-YYYY

row.put(colName, ((Date) obj[i]).getTime());

3 个答案:

答案 0 :(得分:2)

好了,既然您已将Date转换为long,如果您想以您指定的格式再次将其显示为日期,则需要:

1)将其恢复为Date对象,即

Date myDate = new Date(mylongvalue);

2)使用SimpleDateFormatString获得所需格式的Date,即

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
String formattedDate = sdf.format(myDate);
System.out.println(formattedDate);

答案 1 :(得分:1)

answer by GriffeyDog和其他答案在向您展示如何从java.util.Date或java.sql.Date对象生成String时是正确的。但...

  • 其他答案正在使用旧的过时类。
  • 其他答案无法解决时区的关键问题。
  • 您可以找到更好的方法来保留日期时间对象,而不是存储字符串。

java.time

Java 8及更高版本附带java.time框架。这些新类取代了旧的java.util.Date/.Calendar和java.text.SimpleTextFormat类。事实证明,那些旧课程令人困惑,麻烦和有缺陷。

来自java.sql.Date

如果从数据库中获取java.sql.Date对象(您的问题尚不清楚),则您只有日期值,没有时间或时区。所以转换为java.time.LocalDate类。

LocalDate localDate = myJavaSqlDate.toLocalDate();

来自java.util.Date

如果获得java.util.Date个对象,请注意,尽管该类的名称是日期和时间的总和。转换为InstantUTC中时间轴上的一个时刻。

Instant instant = myJavaUtilDate.toInstant();

时区

从那里调整到您希望日期具有意义的时区。在任何特定时刻,世界各地的日期都不一样。新的一天在东部早些时候开始。所以就在巴黎的午夜之后,蒙特利尔仍然是“昨天”。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

现在使用DateTimeFormatter生成日期值的String表示。模式代码与旧java.text.SimpleDateFormat的模式代码略有不同,因此请仔细阅读class doc

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ); 
String output = zdt.format( formatter );

ISO 8601

如果您坚持存储字符串,我建议您将格式更改为标准ISO 8601格式YYYY-MM-DD。按字母顺序排序时,此类字符串值也恰好按时间顺序排列。默认情况下,java.time类使用ISO 8601格式。因此无需指定编码模式。只需转换为LocalDate,然后调用toString

String output = zdt.toLocalDate().toString();

存储日期 - 时间对象

更好的是,将LocalDate个对象存储为地图中的值,而不是String。仅在必要时生成特定格式的特定字符串表示,例如用于呈现给用户。鉴于LocalDate现已内置于Java中,您可以放心地在整个代码中使用它,因为它始终可用。

答案 2 :(得分:0)

您可以尝试以下方式:

日期likesDate = new Date(); //是一个弥补日期 row.put(colName.DateFormat.getDateInstance(DateFormat.SHORT).format(likesDated));

SHORT表示您想要的格式。