从日期中删除日期名称并将其设置为仅'yyyy-MM-dd HH:mm:ss'[重复]

问题描述 投票:0回答:3

我试图以当天早上6点的格式获得格式为yyyy-MM-dd HH:mm:ss,但它显示为:Wed Dec 20 06:00:00 CST 2017

这是我的代码:

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
    Date date0 = new Date();
    String x = dateFormat.format(date0);         

    try{
        DateFormat formatter ; 
        Date date ; 
        formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        date = formatter.parse(x);

    }
    catch (Exception e){}
java date datetime simpledateformat date-formatting
3个回答
3
投票

java.util.Date是自Unix Epoch以来毫秒数的容器,它不保持任何类型的内部格式化概念,相反,当你打印它时,它使用Date#toString,它通常使用当前的Locale来提供人类可读的表示形式价值。

虽然我确信你可以继续使用Date来搞定这项工作,但更简单的方法是利用更新的Date / Time API,比如......

LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.withHour(6).withMinute(0).withSecond(0).withNano(0);
String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(then);
System.out.println(formatted);

对我来说,打印出2017-12-21 06:00:00


2
投票

TL; DR

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    LocalDate date0 = LocalDate.now(ZoneId.of("America/Winnipeg"));
    String at6Am = date0.atTime(LocalTime.of(6, 0)).format(formatter);
    System.out.println(at6Am);

刚刚运行这个打印

2017-12-21 06:00:00

细节

您使用的类DateSimpleDateFormat自Java 1.0以来已经存在了大约20年。事实证明它们的设计很差并且使用起来很麻烦。也许出于这个原因,有很多关于它们的文章,通过搜索网络,你可以很容易地得到这些是你应该使用的类的印象。相反,它们是你应该避免的类。他们用Java 8替代了它,很快就会在4年前推出。

格式化程序用于格式化和解析。您不应该使用格式化程序(甚至更少两个格式化程序)将时间更改为上午6点。

它永远不会在全球各地出现。因此,获取今天的日期是一项取决于时区的操作。我已经在我的代码中明确了时区,因此读者也会意识到这一事实。如果不是美国/温尼伯,请替换您想要的时区。

您正在修改现有软件。如果你有一个老式的Date对象,首先将它转换为现代的Instant类型,然后使用现代API进行进一步的操作。例如:

    Date date0 = getOldfashionedDateFromLegacyApi();
    String at6Am = date0.toInstant()
            .atZone(ZoneId.of("America/Winnipeg"))
            .with(LocalTime.of(6, 0))
            .format(formatter);

您的代码出了什么问题?

我不认为你的问题中的代码有任何问题。你希望你的日期时间格式为2017-12-20 06:00:00,你在第三个代码行的字符串x中得到了它。对此感到满意并省略其余的代码。

没有在日期时间对象上强加格式的事情(无论我们是否谈论过时的或现代的API)。格式化日期时间意味着将其转换为所需格式的String


0
投票

解析后,您需要将其格式化如下:formatter.format(date)。所以修改你的代码如下:

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 06:00:00");
    Date date0 = new Date();
    String x = dateFormat.format(date0);         

    try{
              DateFormat formatter ; 
              Date date ; 
              formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              date = formatter.format(formatter.parse(x));

   }
   catch (Exception e){}
© www.soinside.com 2019 - 2024. All rights reserved.