从日历获取格式化字符串

gr8qqesn  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(412)

我有一个 Calendar java中的日期。
我需要把它转换成 String 使用此格式:

2020-12-29T00:00:00+01:00

我该怎么做?
非常感谢你的帮助。

gv8xihay

gv8xihay1#

去拿那个 Date 通过调用 Calendar#getTime 并使用 SimpleDateFormat 按照格式, yyyy-MM-dd'T'HH:mm:ssXXX .
注意:由于所需字符串的时区偏移为 +01:00 小时,确保你设置了 SimpleDateFormat 反对 TimeZone.getTimeZone("GMT+1") 打电话之前 SimpleDateFormat#format .
演示:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        Date date = calendar.getTime();
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}

另一个例子:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        String dateTimeString = "2020-12-29T00:00:00+01:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date obj = sdf.parse(dateTimeString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(obj);

        // Formatting this calendar object
        Date date = calendar.getTime();
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}

输出:

2020-12-29T00:00:00+01:00
oknwwptz

oknwwptz2#

java.time文件

我建议您在日期和时间工作中使用java.time,即现代的java日期和时间api。
以下是所需格式的格式化程序:

private static final DateTimeFormatter formatter
        = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");

我们可以这样做:

ZoneId zone = ZoneId.of("Asia/Barnaul");
    ZonedDateTime dateTime
            = LocalDate.of(2020, Month.DECEMBER, 29).atStartOfDay(zone);
    String formatted = dateTime.format(formatter);
    System.out.println(formatted);

此示例的输出为:
2020-12-29t00:00:00+07:00

如果你不能避免得到一个日历

如果你得到一个 Calendar 对象,您无法将其升级到java.time,请将其转换为 ZonedDateTime . 几乎可以肯定,这是一个真正的 GregorianCalendar (或者格式化成这种格式没有多大意义),这使得转换变得简单。

Calendar yourCalendar = getCalendarFromLegacyApi();
    ZonedDateTime dateTime
            = ((GregorianCalendar) yourCalendar).toZonedDateTime();

其余的和以前一样,输出也一样。
如果你需要考虑 Calendar 不是一个 GregorianCalendar ,请使用此稍微复杂的转换:

ZonedDateTime dateTime = yourCalendar.toInstant()
            .atZone(yourCalendar.getTimeZone().toZoneId());

链接

oracle教程:date time解释如何使用java.time。

相关问题