我正在从事Spring启动项目,我想转换来自发布请求的String日期
D,100000001028686,BA0884,72087000000176,N,2,147568593,DEPOSITREFERENCE, 2020-08-05 20:17:33.32691 , 601123,ZAR,2500,57,24,i10c = 0,i20c = 2,i50c = 5,iR1 = 2,iR2 = 5,iR5 = 8,iR10 = 200,iR20 = 1,iR50 = 55,iR100 = 60, iR200 = 82,0,0,0,0,000
我要转换的日期在Google上搜索后以粗体显示,但我发现了一些解决方案,但对我不起作用,这里是我到目前为止编写的代码
class Main {
public static void main(String[] args) throws ParseException {
String date = "2020-08-05 20:18:33.32692";
System.out.println(covertDate(date)); //Wed Aug 05 20:19:05 UTC 2020
}
public static Date covertDate(String date) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS");
return formatter.parse(date);
}
}
我得到的答复不是我想要的,有什么办法可以解决问题
答案 0 :(得分:2)
这里是我寻找未来后找到的解决方案 我用Java 8 API解决了
class Main {
public static void main(String[] args) throws ParseException {
String sDate6 = "2020-08-05 11:50:55.555";
System.out.println(covertDate(sDate6)); //2020-08-05T11:50:55.555
}
public static LocalDateTime covertDate(String date) throws ParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);
LocalDateTime dateTime = LocalDateTime.parse(date,formatter);
return dateTime;
}
}
答案 1 :(得分:0)
在JShell (Java Version 14)
中,我运行了您的代码,并能够得到类似的结果(当然,这是格林尼治标准时间而不是UTC;但是,秒数与您当前的输出偏移相同的量):
如果问题与UTC有关:
我建议使用Instant
,因为它可以避免LocalDateTime
多年来提出的许多问题。如评论中所述,通常最好避免使用java.util.Date
,而改为使用Instant
(或者您可以使用更传统的LocalDateTime
)。
如果您要谈论的是Spring
带注释的@PostMapping
方法来自动解析日期,则可以使用类似以下内容的方法:
@PostMapping
public String postDate(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Long dateReq) {
Instant date = Instant.ofEpochMilli(dateReq);
System.out.println(date);
}
如果您想使用自定义格式器,则可以将@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSS" LocalDateTime date)
作为postDate
方法的参数。
请不要让Spring
的文档声明@DateTimeFormat
的模式字段使用与java.text.SimpleDateFormat
相同的模式。这样可能有用。