Java:apache.commons.lang3.time.DateUtils.parseDate 与时区

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

背景与目的

  • 我想使用
    String
    Date
    解析为
    apache.commons.lang3.time.DateUtils.parseDate
    ,但是遇到问题,可能与时区有关。
  • 我目前在中国(时区:CST = GMT+8)。

代码

  • 我创建了一个变量
    date
    ,即
    Wed Jan 10 00:00:00 CST 2024
  • 我期望第二个变量
    date2
    date
    Wed Jan 10 00:00:00 CST 2024
    相同,但实际值是
    Wed Jan 10 14:00:00 CST 2024
import java.util.Date;
import java.util.Calendar;

public class ClassTest {

    private static final String[] parsePatterns = {"EEE MMM dd HH:mm:ss zzz yyyy"};

    public void methodTest() throws Exception {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2024, Calendar.JANUARY, 10, 0, 0, 0);

        Date date = calendar.getTime();
        System.out.println(date); // Wed Jan 10 00:00:00 CST 2024

        Date date2 = org.apache.commons.lang3.time.DateUtils.parseDate(date.toString(), parsePatterns);
        System.out.println(date2); // Wed Jan 10 14:00:00 CST 2024
    }

    public static void main(String[] args) {
        ClassTest ct = new ClassTest();
        try {
            ct. methodTest();
        } catch (Exception e) {}
    }
}

版本

Java:8
Apache 公共语言:3.9

java date parsing java-8 timezone
1个回答
0
投票

您需要应用打印或字符串化时创建的格式,但您需要使用正确的日期类,并且不需要第 3 方:

import java.time.*;
import java.time.format.*;
import java.util.Locale;

public class Jan {
    public static void main(String[] args) throws Exception {
        final String DATE_PAT = "EEE MMM dd HH:mm:ss zzz yyyy";
        final String ZONE_PAT = "Asia/Shanghai";
        ZonedDateTime janTen = ZonedDateTime.of(2024, Month.JANUARY.getValue(), 10, 0, 0, 0, 0, ZoneId.of(ZONE_PAT));
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DATE_PAT, Locale.US);
        System.out.println(janTen.format(dtf));
        String display = dtf.format(janTen);
        ZonedDateTime x = ZonedDateTime.parse(display, dtf);
        System.out.println(x.format(dtf));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.