以YYYY-MMM-dd格式将Java.util日期转换为XML日期

时间:2015-02-24 16:15:58

标签: java datetime

我正在使用下面的代码将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格式返回。 任何人都可以告诉我如何更改格式? 感谢

2 个答案:

答案 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)

TL;博士

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.DateCalendar等。现在这些类已经遗留下来,取而代之的是java.time类。

相当于java.util.DateInstantInstant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。您可以通过调用添加到旧类的新方法进行转换。

Instant instant = myJavaUtilDate.toInstant();

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore