Java格式化GMT日期

zd287kbt  于 2022-11-20  发布在  Java
关注(0)|答案(1)|浏览(281)

我找不到编辑GMT日期的方法
我收到“params.date“一个字符串,格式为“yyyyMMdd”,所以这是我的流:

Date date = new SimpleDateFormat('yyyyMMdd').parse(params.data)
System.out.println(sdf.parse(params.data))

输出:

Thu Nov 17 21:00:00 GMT-03:00 2022

我需要它:

Thu Nov 17 21:00:00 GMT-00:00 2022

有人能帮帮我吗?

p5fdfcr1

p5fdfcr11#

几个要点:

  1. 2022年11月17日星期四21:00:00 GMT-03:00不等于2022年11月17日星期四21:00:00 GMT-00:00。2022年11月17日星期四21:00:00 GMT-03:00的日期时间等于2022年11月18日星期五00:00:00 GMT+00:00的日期时间,您可以通过将2022年11月17日星期四21:00:00 GMT-03:00增加3小时来获得该日期时间。
    1.您的时区偏移量为-03:00,因此java.util.Date对象将以默认的时区偏移量显示。请注意,java.util.Date并不表示真实的的日期时间,而是提供了从Epoch开始的毫秒数,然后Date#toString实现应用系统的时区来呈现字符串。
    1.***java.util***日期-时间API及其格式化API SimpleDateFormat已经过时且容易出错。建议完全停止使用它们并改用modern date-time API

使用java.time API进行演示

import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {

        public static void main(String[] args) {
                String data = "20221118";
                LocalDate date = LocalDate.parse(data, DateTimeFormatter.BASIC_ISO_DATE);

                ZonedDateTime zdt1 = date.atStartOfDay(ZoneOffset.UTC);
                ZonedDateTime zdt2 = zdt1.withZoneSameInstant(ZoneOffset.of("-03:00"));

                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss 'GMT'xxx uuuu",
                                Locale.ENGLISH);
                System.out.println(formatter.format(zdt2));
                System.out.println(formatter.format(zdt1));
        }
}

输出

Thu Nov 17 21:00:00 GMT-03:00 2022
Fri Nov 18 00:00:00 GMT+00:00 2022

从**Trail: Date Time**了解有关现代日期-时间API的更多信息。

相关问题