当前位置: 首页 > 面试题库 >

Java日期更改格式[重复]

卫甫
2023-03-14
问题内容

我试图改变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对象没有任何影响,仍然是旧格式,无法真正理解为什么会这样。


问题答案:

请尝试将两个概念区分开:您的数据和向用户呈现的数据(或用于其他目的的格式设置,例如包含在JSON中)。的int保持值7可以表示为(格式化成)7,07,007或7,同时仍保持刚好相同的值而没有任何格式化信息-
外的格式化谎言int。同样,a 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,则大多数其他较新的日期和时间类型可以使用相同的方式以完全相同的方式进行格式化DateTimeFormatterInstant在这方面有一点特殊之处,因为它不包含日期,但是您可以例如myInstant.atZone(ZoneId.of("Europe/Oslo")).format(dateFormatter)获取该日期在奥斯陆所在时区的日期。

现代类是在Java 8中引入的,在Java 9中得到了一些增强。它们已在ThreeTen
Backport中向后移植到Java
6和7,其中包括适用于Android的特殊版本ThreeTenABP。因此,我真的没有理由不解释为什么您不希望在自己的代码中使用它们。



 类似资料:
  • 我有Date对象的格式 我是怎么做到的?。 我试着用这个代码 当我试着做一个测试时,我会得到这样的结果: 我的问题是在sql将java.util.date更改为java.sql.date时出现的 我解决了这个问题,所以: 和测试:

  • 但这对对象没有任何影响,它还是用旧格式的,不能真正理解它为什么会那样。

  • 问题内容: 我需要使用Java更改日期格式 问题答案: 如何使用从一种日期格式转换为另一种日期格式:

  • 问题内容: 如何在下面转换以下日期格式(2012年11月19日星期一13:29:40) 变成: dd / mm / yyyy 问题答案: 一些JavaScript引擎可以直接解析该格式,这使任务非常容易:

  • 我要在数据库中输入任务的开始日期和截止日期。但是保存数据库的格式是这样的:Tue Apr 15 13:46:38 BST 2014 I want in yyyy-MM-dd格式。 这是我用来编写数据库中数据的代码: ----------形式---------