[英]SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ssZ”) parse in java gives wrong date?
[英]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));
这将返回正确的月份和日期,但没有别的。
1970-06-05T00:00:00.00-0400
知道如何让它返回
CURRENT_YEAR-06-05TCURRENT_TIME
在问题中,日期格式模式表示需要 2 位小数秒。 SimpleDateFormat
无法做到这一点。
较新的 Java 8 次 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")));
样品 Output
2020-06-05T14:52:48.45-0400
我建议使用java.time
package。 你有 go:
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
格式器之一来获得所需的 output。
对于这么简单的事情,我建议采用不同的方法,获取当前时间,然后从原始字符串 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()));
您正在创建只有月份和日期的日期如果要使用当前年份和时间,可以创建日历 object 并编辑月份和日期
String strDate = "06-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-"+strDate+"'T'HH:mm:ss.SSZ");
System.out.println(sdf.format(new Date()));
output:
2020-06-05T23:00:45.306+0400
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.