将日期从 MM/dd 更改为 Java 中的 yyyy-MM-dd'T'HH:mm:ss.SSZ

Change date from MM/dd to yyyy-MM-dd'T'HH:mm:ss.SSZ in Java

我有一个格式化为 MM/dd 的字符串。我想将其转换为 yyyy-MM-dd'T'HH:mm:ss.SSZ.

格式的日期
DateFormat df = new SimpleDateFormat("MM/dd");
String strDate = "06/05";
Date date = new Date();
date = df.parse(strDate);

这使其成为日期,但采用原始格式。

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSZ").format(date));

这 return 是正确的月份和日期,但没有别的。

1970-06-05T00:00:00.00-0400

知道我该怎么做吗return

CURRENT_YEAR-06-05TCURRENT_TIME

对于这种简单的事情,我建议采用不同的方法,获取当前时间,然后根据原始字符串 THEN 格式设置月份和日期。

String str = "08/09";
        String[] split = str.split("/");

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.MONTH, Integer.parseInt(split[0]));
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(split[1]));
        System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(calendar.getTime()));

您正在创建一个只有月和日的日期 如果你想使用当前的年份和时间,你可以创建一个日历对象并编辑月份和日期

String strDate = "06-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-"+strDate+"'T'HH:mm:ss.SSZ");
System.out.println(sdf.format(new Date()));

输出:

2020-06-05T23:00:45.306+0400

我建议使用 java.time 包。给你:

var ds = "01/12";
var df = java.time.format.DateTimeFormatter.ofPattern("MM/dd");
var dt = java.time.MonthDay.from(df.parse(ds)).adjustInto(java.time.LocalDateTime.now());

然后您可以将 dt 转换为 java.util.Date 或任何您喜欢的格式。或者简单地使用 java.time 格式器之一来获得所需的输出。

在问题中,日期格式模式表示需要两位数的小数秒。 SimpleDateFormat 不能那样做。

较新的 Java 8 Time API 可以,无论如何你应该使用它。

如果您 运行 在 Java 6 或 7,获取 ThreeTen-Backport 库。

要在默认时区中解析 MM/dd 格式的字符串并获取具有当前年份和时间的完整时间戳,请使用以下代码:

String strDate = "06/05";
MonthDay monthDay = MonthDay.parse(strDate, DateTimeFormatter.ofPattern("MM/dd"));
ZonedDateTime date = ZonedDateTime.now().with(monthDay);
System.out.println(date.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSZ")));

示例输出

2020-06-05T14:52:48.45-0400