如何只获得类型为 XMLGregorianCalendar 的年份
How get only year with type XMLGregorianCalendar
我有一个 XML Jaxb class 可以设置为 XMLGregorianCalendar 类型。但是我们应该在这个属性中只设置年份。
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new
GregorianCalendar());
xmlCal.setYear(2021);
xmlObject.setBuiltYear(xmlCal);
// xmlCal.getYear() will give me year but its type int , so setter method not accepting it. If
has to be of type XMLGregorianCalendar only with year.
如果我像上面那样设置它 2021-09-23T10:19:38.346-04:00
但我只需要类型为 XMLGregorianCalendar 的年份。我们该怎么做?
在设置年份之前使用XMLGregorianCalendar#clear
。
演示:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Main {
public static void main(String[] args) throws DatatypeConfigurationException {
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
xmlCal.clear();
xmlCal.setYear(2021);
System.out.println(xmlCal);
}
}
输出:
2021
Arvind Kumar Avinash 的回答很好而且正确。还有其他方法可以获得相同的,所以作为补充,我提出了一对。
编辑:Arvind Kumar Avinash 的代码的更简单和更短的变体:
XMLGregorianCalendar xmlCal
= DatatypeFactory.newInstance().newXMLGregorianCalendar();
xmlCal.setYear(2021);
System.out.println(xmlCal);
输出:
2021
无参数 newXMLGregorianCalendar()
给我们一个 XMLGregorianCalendar
,所有字段都未定义或 null
。设置年份,大功告成。
您也可以直接从工厂方法调用中创建您想要的 XMLGregorianCalendar
完全完整。这是一个较长的变体:
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance()
.newXMLGregorianCalendarDate(2021, DatatypeConstants.FIELD_UNDEFINED,
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
结果和之前一样。我设置未定义的字段是月份、日期和 UTC 偏移量(称为 timezone with XMLGregorianCalendar
)。
一个更短的变体是:
XMLGregorianCalendar xmlCal
= DatatypeFactory.newInstance().newXMLGregorianCalendar("2021");
输出仍然是期望的:
2021
正如您想要一个 XMLGregorianCalendar
来生成特定字符串一样,XMLGregorianCalendar
也可以从您想要的字符串构造。
如果您的年份是 int
,您可以先转换:
int year = 2021;
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(String.valueOf(year));
将您的 int
转换为 String
只是为了再次解析它可能感觉很浪费。你来决定。
更喜欢哪种方式?这是一个品味问题。
java.time.Year
顺便说一句,仅当您的 class 需要 XMLGregorianCalendar
时,才使用 class。对于所有其他目的,我推荐 Year
class:
Year year = Year.of(2021);
System.out.println(year);
2021
我有一个 XML Jaxb class 可以设置为 XMLGregorianCalendar 类型。但是我们应该在这个属性中只设置年份。
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new
GregorianCalendar());
xmlCal.setYear(2021);
xmlObject.setBuiltYear(xmlCal);
// xmlCal.getYear() will give me year but its type int , so setter method not accepting it. If
has to be of type XMLGregorianCalendar only with year.
如果我像上面那样设置它 2021-09-23T10:19:38.346-04:00
但我只需要类型为 XMLGregorianCalendar 的年份。我们该怎么做?
在设置年份之前使用XMLGregorianCalendar#clear
。
演示:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Main {
public static void main(String[] args) throws DatatypeConfigurationException {
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
xmlCal.clear();
xmlCal.setYear(2021);
System.out.println(xmlCal);
}
}
输出:
2021
Arvind Kumar Avinash 的回答很好而且正确。还有其他方法可以获得相同的,所以作为补充,我提出了一对。
编辑:Arvind Kumar Avinash 的代码的更简单和更短的变体:
XMLGregorianCalendar xmlCal
= DatatypeFactory.newInstance().newXMLGregorianCalendar();
xmlCal.setYear(2021);
System.out.println(xmlCal);
输出:
2021
无参数 newXMLGregorianCalendar()
给我们一个 XMLGregorianCalendar
,所有字段都未定义或 null
。设置年份,大功告成。
您也可以直接从工厂方法调用中创建您想要的 XMLGregorianCalendar
完全完整。这是一个较长的变体:
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance()
.newXMLGregorianCalendarDate(2021, DatatypeConstants.FIELD_UNDEFINED,
DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
结果和之前一样。我设置未定义的字段是月份、日期和 UTC 偏移量(称为 timezone with XMLGregorianCalendar
)。
一个更短的变体是:
XMLGregorianCalendar xmlCal
= DatatypeFactory.newInstance().newXMLGregorianCalendar("2021");
输出仍然是期望的:
2021
正如您想要一个 XMLGregorianCalendar
来生成特定字符串一样,XMLGregorianCalendar
也可以从您想要的字符串构造。
如果您的年份是 int
,您可以先转换:
int year = 2021;
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(String.valueOf(year));
将您的 int
转换为 String
只是为了再次解析它可能感觉很浪费。你来决定。
更喜欢哪种方式?这是一个品味问题。
java.time.Year
顺便说一句,仅当您的 class 需要 XMLGregorianCalendar
时,才使用 class。对于所有其他目的,我推荐 Year
class:
Year year = Year.of(2021);
System.out.println(year);
2021