代码之家  ›  专栏  ›  技术社区  ›  MSV123

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

  •  0
  • MSV123  · 技术社区  · 7 年前

    我正在用以下格式获取当天早上6点的日期 yyyy MM dd HH:MM:ss ,但它显示为: 2017年12月20日星期三06:00:00 CST

    这是我的代码:

        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){}
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   MadProgrammer    7 年前

    java.util.Date 是自Unix纪元以来毫秒数的容器,它不维护任何类型的内部格式概念,而是在打印时使用 Date#toString 通常使用电流 Locale 提供价值的可读表示。

    我相信你可以继续胡闹 Date 为了实现这一点,一种更简单的方法是利用较新的日期/时间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
  •  2
  •   Anonymous    7 年前

    TL;博士

        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
    

    细节

    您使用的类, Date SimpleDateFormat ,从Java 1.0开始,大约有20年了。事实证明,它们设计拙劣,使用繁琐。也许也是出于这个原因,关于它们的文章已经很多了,通过搜索web,你可以很容易地得到这样的印象,即这些是你应该使用的类。相反,它们是你应该避免的课程。他们的替代者是Java 8,这将是4年前的事了。

    格式化程序用于格式化和解析。您不应该使用格式化程序,更不应该使用两个格式化程序,将一天的时间更改为上午6点。

    世界各地的日子都不一样。因此,获取今天的日期是一项取决于时区的操作。我在代码中明确了时区,因此读者也会意识到这一事实。如果不是美国/温尼伯,请替换您想要的时区。

    您正在修改现有软件。如果你有一个老式的 日期 对象,首先将其转换为现代 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 在第三行代码中。对此感到满意,并省略代码的其余部分。

    String 以所需格式。

        3
  •  0
  •   JMA    7 年前

    解析后,需要按如下方式对其进行格式化: 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){}