代码之家  ›  专栏  ›  技术社区  ›  A.J

更改日期格式

  •  0
  • A.J  · 技术社区  · 3 年前

    我有以下代码:

    // OLD DATE
    String date = "Mon, 06/07";
    
    DateFormat df = new SimpleDateFormat("MM/dd");
    String strDate = date.substring(date.length() - 5);
    Date dateOld;
    try {
        dateOld = df.parse(strDate);
    } catch (Exception e) {
        e.printStackTrace();
    }
    String dateStr = df.format(dateOld);
    MonthDay monthDay = MonthDay.parse(dateStr, DateTimeFormatter.ofPattern("MM/dd"));
    ZonedDateTime dateNew = ZonedDateTime.now().with(monthDay);
    
    // NEW DATE
    System.out.println(dateNew.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T00:00:00Z'")));
    

    Mon, 06/07 格式化为此格式 2021-06-07T00:00:00Z .

    我所拥有的东西是有用的,但真的很可怕。有什么更好的方法吗?

    1 回复  |  直到 3 年前
        1
  •  1
  •   MadProgrammer    3 年前

    这有点棘手,因为你需要做一些假设

    • 时区,因为根本没有指定(最终输出似乎指向UTC)

    首先要做的是解析 String LocalDate (你可以直接去 ZonedDate ,但我就是从这里开始的)

    String date = "Mon, 06/07";
    DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
            .appendPattern("E, M/d")
            .parseDefaulting(ChronoField.YEAR, 2021)
            .toFormatter(Locale.US);
    
    LocalDate ld = LocalDate.parse(date, parseFormatter);
    

    LocalDateTime

    LocalDateTime ldt = ld.atStartOfDay();
    

    然后,到一个 ZonedDateTime . 这里我假设UTC

    //ZoneId zoneId = ZoneId.systemDefault();
    //ZonedDateTime zdt = ldt.atZone(zoneId);
    OffsetDateTime zdt = ldt.atOffset(ZoneOffset.UTC);
    

    最后,将结果格式化为所需的格式

    String formatted = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(formatted);
    

    2021-06-07T00:00:00Z
    

    很多时间和精力都花在了新的日期/时间api上,你应该抽出时间来尝试并尽可能地学习它们(我已经很生疏了,但是稍加修改,就得到了结果)

    也许从 Date/Time trails

        2
  •  1
  •   alijandro    3 年前

    Calendar , Date SimpleDateFormat

        SimpleDateFormat sdf = new SimpleDateFormat("EEE, MM/dd", Locale.getDefault());
        try {
            Date oldDate = sdf.parse("Mon, 06/07");
            Calendar calendar = Calendar.getInstance();
            int savedYear = calendar.get(Calendar.YEAR);
    
            if (oldDate != null) {
                calendar.setTime(oldDate);
                calendar.set(Calendar.YEAR, savedYear);
                sdf.applyPattern("yyyy-MM-dd'T00:00:00Z'");
                System.out.println(sdf.format(calendar.getTime()));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }