Java日期更改格式

时间:2017-06-01 11:40:14

标签: java date date-format datetime-format java-date

我正在尝试更改Date个对象的格式,我试图以这种方式执行此操作:

for(Date date : dates){
    DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
    String formatterDate = formatter.format(date);
    Date d = formatter.parse(formatter.format(date));                      
}

但这对d对象没有任何影响,它仍然采用旧格式,无法真正理解为什么会这样。

4 个答案:

答案 0 :(得分:3)

请尝试将两个概念区分开来:您的数据和向用户呈现数据(或格式化用于其他目的,例如包含在JSON中)。保持值为7的int可以显示为(格式化为)7,07,007或+7,同时仍然保持相同的值而没有任何格式信息 - 格式位于int之外。同样,Date持有一个时间点,它可以表示为(格式化为)“2017年6月1日,12:46:01.169”,“2017/06/01”或“2017年6月1日”虽然仍然保持相同的值而没有任何格式信息 - 格式位于Date

之外

根据您的要求,一个选项是将您的日期存储为Date(或更好,现有日期和时间类之一的实例,如LocalDate)并保留一个格式化程序您可以在每次需要向用户显示时对其进行格式化。如果这不起作用,您需要以特定格式存储日期,然后将其存储为String

Java 8(7,6)日期和时间API

现在我一直在评论在评论中使用较新的Java日期和时间类,所以不告诉你它们有效是不公平的。问题尝试格式化为yyyy-MM-dd,我们可以使用以下代码进行格式化。

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd");
    for (LocalDate date : localDates) {
        String formatterDate = date.format(dateFormatter);
        System.out.println(formatterDate);
    }

在一次运行中我得到了

2017/05/23
2017/06/01

如果列表中的对象具有除LocalDate之外的其他类型,则大多数其他较新的日期和时间类型可以使用相同的DateTimeFormatter以完全相同的方式进行格式化。 Instant在这方面有点特别,因为它不包含日期,但您可以例如myInstant.atZone(ZoneId.of("Europe/Oslo")).format(dateFormatter)来获取该时刻在奥斯陆时区的日期。< / p>

现代类是在Java 8中引入的,并且在Java 9中得到了一些增强。它们已被移植到ThreeTen Backport中的Java 6和7,并附带了针对Android的特殊版本ThreeTenABP。所以我真的没有理由不在你自己的代码中使用它们。

答案 1 :(得分:0)

试试这个。

String formattedDate = null;
    SimpleDateFormat sdf = new SimpleDateFormat(format you want);
    formattedDate = sdf.format( the date you want to format );
   return formattedDate;

答案 2 :(得分:-1)

一些不是最佳解决方案,但它可行:此方法将Date对象转换为您需要的任何模式的String

<?php
  session_start();
  setcookie("branchID", "", 1);
  setcookie("companyID", "", 1);
  setcookie("userID", "", 1);
  setcookie("userName", "", 1);
  session_destroy();
  header('location: index.php');
?>

答案 3 :(得分:-1)

SimpleDateFormat在将Date转换为String时非常有用,反之亦然。 java.util.Date格式始终保持不变。如果要在独立应用程序中显示它,请使用date.getxxx()方法并选择您的设计。