我正在使用下面的代码将java.util.date转换为XML日期
public static XMLGregorianCalendar toXMLDate(Date dte) {
try {
// this may throw DatatypeConfigurationException
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
GregorianCalendar calendar = new GregorianCalendar();
// reset all fields
calendar.clear();
Calendar parsedCalendar = Calendar.getInstance();
parsedCalendar.setTime(dte);
calendar.set( parsedCalendar.get(Calendar.YEAR ),
parsedCalendar.get(Calendar.MONTH),
parsedCalendar.get(Calendar.DATE ));
XMLGregorianCalendar xmlCalendar = datatypeFactory.newXMLGregorianCalendar( calendar );
xmlCalendar.setTimezone( DatatypeConstants.FIELD_UNDEFINED );
xmlCalendar.setFractionalSecond( null );
return xmlCalendar;
}
我需要以YYYY-MMM-dd格式获取日期,但它以YYYY-MM-dd格式返回。 任何人都可以告诉我如何更改格式? 感谢
答案 0 :(得分:1)
尝试这样的事情:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formate.parse("your string goes here");
long timestamp = date.getTime();
How to convert “YYYY-MM-DD hh:mm:ss” to UNIX timestamp in Java?
答案 1 :(得分:1)
myJavaUtilDate.toInstant()
.atZone( ZoneId.of( "America/Montreal" ) )
.toLocalDate()
.toString()
2017年1月23日
没有XML date
这样的东西。也许你的意思是W3C在XML Schema中定义的日期时间格式。这些格式属于ISO 8601标准定义的格式,在解析/生成字符串时默认情况下由java.time类使用。
您的问题很混乱,要求显示生成XMLGregorianCalendar
对象的代码字符串。 日期时间对象(例如XMLGregorianCalendar
不)具有格式。此类日期时间对象存储信息,而不是文本。您可以要求此类对象生成一个String对象,该对象的文本表示对象中的值。但是字符串和日期时间对象完全不同并且是分开的。
避免遗留日期时间类,例如java.util.Date
,Calendar
等。现在这些类已经遗留下来,取而代之的是java.time类。
相当于java.util.Date
是Instant
。 Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。您可以通过调用添加到旧类的新方法进行转换。
Instant instant = myJavaUtilDate.toInstant();
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
您只想使用日期部分,而不是一天中的某个时间。因此,提取LocalDate
。
LocalDate ld = zdt.toLocalDate();
您想要的格式符合日期时间文本的标准ISO 8601格式。默认情况下,java.time类使用标准格式。因此无需指定格式化模式。
String output = ld.toString() ;
2017年1月23日
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。