Java API:将XMLGregorianDate转换为正常日期

Java API:将XMLGregorianDate转换为正常日期,java,api,Java,Api,我正在构建一个API Java代码,将通过Paypal为我工作的这家公司进行的交易、争议和付款列表下载到CSV文件中。CSV文件中的一列是与日期相关的列,如下所示: transactionData.add(String.valueOf(transaction.getDisferences().get(i).getReceivedDate()) 问题在于,上述数据列的所有值都以XMLGregorianDate的形式出现在CSV中: java.util.GregorianCalendar[time=

我正在构建一个API Java代码,将通过Paypal为我工作的这家公司进行的交易、争议和付款列表下载到CSV文件中。CSV文件中的一列是与日期相关的列,如下所示:

transactionData.add(String.valueOf(transaction.getDisferences().get(i).getReceivedDate())

问题在于,上述数据列的所有值都以XMLGregorianDate的形式出现在CSV中:

java.util.GregorianCalendar[time=15897600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“UTC”,offset=0,dstSaves=0,useDaylight=false,transitions=0,lastRule=null],周的第一天=2,周的第一天=4,纪元=1,年=2020,月=4,年的第周=21,月的第周=3,月的第日=18,年的第日=139,周的第日=2,周的第日=3,上午下午=0,小时=0,日的小时=0,分钟=0,秒=0,毫秒=0,区域偏移=0,DST偏移=0]


我应该对上面的行进行哪些更改,以提供带有时区的时间戳数据,即“yyyy-mm-dd hh:mi:ss+/-tz”

GregorianCalendar
扩展了
Calendar
,该日历具有
getTime():Date
方法:

您有两个选项来指定日期-时间输出格式:

1-在Java.Time包下使用Java8日期和时间API(推荐)

2-使用日期时间类,如java.util.Date和java.text.SimpleDataFormat

        final Date receivedDate = gregorianCalendar.getTime();
        final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateTimePattern);
        final String dateFormat2 = simpleDateFormat.format(receivedDate);
        transactionData.add(dateFormat2);


这是一个
gregorianalendar
对象,在Java中是一个“普通日历”对象。你想要什么,你能不能更详细地描述一下,而不仅仅是说“像往常一样的正常约会”?嗨@JoachimSauer谢谢你的提问。我刚刚添加了我想要的格式。@JoachimSauer
gregorianalendar
在Java8之前是一个正常的日期。那是六年前的事了。它的设计总是很糟糕,幸运的是它已经过时很久了。我不想考虑设计不当,对于java来说,过时了。今天的正常日期是
LocalDate
from。这是否回答了您的问题?或者这个?CSV文件中的一行是什么样子的?正如我所说,
GregorianCalendar
设计拙劣且早已过时,因此通过该类似乎是一条令人不快的迂回之路?我们可以避免它吗?嗨@Ehbat Qadah这是非常接近我所寻找的-这是现在返回的格式“周二4月28日01:00:00英国夏令时2020年”。现在如何将其转换为带时区的时间戳?Thanks@ERR您能否提供一个示例,说明您如何准确地使用输出格式?您好@Ehab Qadah,我希望它是“yyyy-mm-dd-hh:mi:ss+/-tz”。如果不可能,至少“yyyy-mm-dd hh:mi:ss”。谢谢。请不要教年轻人使用早已过时且臭名昭著的
SimpleDateFormat
类。至少不是第一个选择。而且不是毫无保留的。今天,我们在和它的
DateTimeFormatter
中有了如此多的改进。很好的一点将更新它!
        final Date receivedDate = gregorianCalendar.getTime();
        final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateTimePattern);
        final String dateFormat2 = simpleDateFormat.format(receivedDate);
        transactionData.add(dateFormat2);