java - SAP PI UDF 将没有时间的日期转换为日期时间 ISO8601 字符串
问题描述
我需要为 SAP PI 编写一个 java 函数,它以以下格式为我的 XML 映射返回一个字符串:yyyy-MM-dd T HH:mm:ss(例如,2018-08-15T00:00:00
)即使我的源字段只是一个没有时间的日期字段(例如,2018-08-15
)。
我已经尝试过SimpleDateFormat
Java 类,但我无法让它工作。有没有一种简单的方法可以做到这一点?
在建议的帖子(答案/重复/链接)中,我找不到我要找的东西。猜想我没有足够清楚地描述问题,但问题是我从源 XML (SAP PO) 获取日期,我需要将其转换为目标 XML 中的 ISO 8601 日期。
感谢 Ole,我想出了以下“初学者”功能(为了完整性):
public String DH_FormatDateTimeStringB(String ndate, String npattern, Container container) throws StreamTransformationException{
//This function gets a date from the IDOC and returns it as a datetime string in ISO 8601 (ISO 8601 Representation of dates and times
//in information interchange required. Ex: npattern = "yyyy-MM-dd")
DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern(npattern);
LocalDate date = LocalDate.parse(ndate, formatterDate);
//Convert date to datetime
LocalDateTime localDateTime1 = date.atStartOfDay();
//System.out.println(localDateTime1.toString());
return localDateTime1.toString();
}
因为它现在只需要一个没有时间的日期,它可能会使用“StartOfDay”。也许我稍后会调整它以查看字符串中是否有时间部分。
谢谢大家帮忙!
解决方案
String dateStringFromSapPo = "2018-08-15";
LocalDate date = LocalDate.parse(dateStringFromSapPo);
LocalDateTime dateTime = date.atStartOfDay();
String dateTimeStringForSapPi = dateTime.toString();
System.out.println("String for SAP PI: " + dateTimeStringForSapPi);
这打印:
SAP PI 的字符串:2018-08-15T00:00
它没有几秒钟,但符合 ISO 8601 标准,因此应该在您的 XML 和 SAP 中工作。如果没有,您将需要使用显式格式化程序:
DateTimeFormatter dateTimeFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
String dateTimeStringForSapPi = dateTime.format(dateTimeFormatter);
现在秒数也出来了:
SAP PI 的字符串:2018-08-15T00:00:00
顺便说一句,给你一个没有时区或偏移量的日期时间字符串让我有点担心。这不是一个时间点,将其解释为一个时间点,SAP 将不得不假设一个时区。只有当你确定它选择了预期的那个,你就可以了。如果没有,我很抱歉我不能告诉你解决方案。
链接: Oracle 教程:日期时间解释如何使用java.time
推荐阅读
- dataframe - 在 Julia/Juno 中显示数据框
- laravel - 从 Laravel Horizon 中获取日志,在主管的 docker 中运行
- asp.net-core - 在 Startup.Configure 期间将自定义配置源添加到 ASP.NET Core
- r - 妊娠不识别数字变量
- excel - 将计数字段用作 Excel 数据透视表中的一行
- mysql - 为 MySQL 服务器指定主机名 - 连接被拒绝
- docker - 跟踪 Docker-for-mac CLI 程序执行输出以查找运行调用
- sql-server - 为什么在 docker-compose up 构建期间找不到 sqlcmd?
- python - 如何发送python套接字字节和字符串?
- javascript - React Router 参数无法与 tomcat 一起正常工作