
关于XML日期的定义
XML Date被定义为一种数据类型,用于指定XML文档中的日期。根据W3C XML Schema,一个日期在其时区是一天的时间。日期规则可以根据要求进行定制,有时需要进行一些日期操作或将日期解析为特定的格式,如果不使用本地时间,应指定时区。日期格式是由日期模式字符串通过指定从A到Z的字母定义的。
在这篇文章中,我们使用了Class XML Gregorian Calendar的数据Utility。
语法
日期的XML格式在以下格式中给出
CCYY-MM-DD
模式中的正式结构如下。
<xsd : date>
其中数据类型指定为年、月、日。它是一个有限长度的字符序列,带有yy-mm-dd。四位数的数字代表一个年份,负值被限制,0000年被忽略。而在这个格式之间有一个符号'-'分隔符;最后,两位数的数字表示月份和日期。
元素声明的图示为
<xs: element name =”dob; type = “ xs:date”/>
Xpath上的当前日期被定义为
xs:date fn:current-date()
Date函数在XML中是如何工作的?
一般来说,这个Date函数包括如下数据类型
- xs:dateTime (CCYY-MM-DDThh:mm:ss)
- xs:date (CCYY-MM-DD)
- xs:时间 (hh:mm:ss)
- xs:gYearMonth (CCYY-MM)
- xs:gYear (CCYY)
- xs:gMonthDay (-MM-DD)
- xs:gMonth (-MM-)
- xs:gDay (-DD)
和XML格式化器更倾向于使用简单日期格式,而且它不是线程安全的。另外,这个构造函数在所有的本地文件中都不被支持。格式是这样:
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
格里高利历被指定为
<xsd:simpleType name="date" id="da">
<xsd:restriction base="xsd:anySimpleType">
<xsd:whiteSpace value="hello" fixed="true"/>
</xsd:restriction>
</xsd:simpleType>
xsd:date的有效值是
2011-11-21
2011-11-21 +02:00
2011-11-21 Z
2011-11-21+00:00
2011-11-21
2011-02-03
给出的日期时间的值被XML解析器解析,它将输入的XML中声明的日期时间值转换为当地时区格式的值。因此,甚至可以做一个夏令时的选项。
使用Current date()函数来显示该日的当前日期。这个函数的调用没有传递任何参数。结果,它返回由系统时间操纵的日期,即给出一个常量值。让我们看看XSD文件的一个简单的工作代码。
<?xml version="1.0" encoding="utf-8"?>
<xsl: stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl: template match="/">
<html>
<body>
<h3>Display Date</h3>
The current date today is:
<xsl:value-of select="current-date ()" />
<br />
</body>
</html>
</xsl: template>
</xsl: stylesheet>
在Xpath中,我们有如下内容
<xf:output value="exf:format-datetime(currentdate,'d')" />
<xf:output value="exf:format-datetime(fn:current-date(),'D')" />
日期的几个函数是dateTime(), year-from-dateTime(), year-from-date(date), month-from-date(date) , day-from-date(date)。
接下来,对于示例的XML模式,XML日期和时间的定制被指定为
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="divya Ro">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="dOB" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
现在,在java文件中,dob是regorgian Calendar的一部分。
public class Client {
@XmlElement(name = "dob")
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar dateOfBirth;
public XMLGregorianCalendar getDateOfBirth()
{return dateOfBirth;}
public void setDateOfBirth(XMLGregorianCalendar value)
{this.dateOfBirth = value;
}
}
例子
现在让我们看看这个功能在XSLT和java中是如何工作的。
例子#1 - 简单的XML文件显示日期
date.xml
<?xml version="1.0" encoding="UTF-8"?>
<Client>
<Dob>2020-03-11T11:14:15Z</Dob>
<Residence>
<Line1>38, Laciys Street</Line1>
<Line2>Flaytown, Switzerland</Line2>
</Residence>
</Client>
<Goods>
<Phone>0123-67542</Phone>
<Address>
<Line1>67, Washington Street/Line1>
<Line2>Zaeooper Mark Avenue</Line2>
</Address>
</goods>
输出

例子#2
Educ.java
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Educ
{
private final static String TIMESTAMP_PATTERN
= "MM/dd/yyyy hh:mm a z";
private final static DateTimeFormatter DATE_TIME_FORMATTER
= DateTimeFormatter.ofPattern(TIMESTAMP_PATTERN);
public static void main(String[] args)
throws DatatypeConfigurationException
{
GregorianCalendar c = new GregorianCalendar();
c.setTime(new Date());
XMLGregorianCalendar xc = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(c);
ZonedDateTime zon = xc.toGregorianCalendar().toZonedDateTime();
System.out.println( DATE_TIME_FORMATTER.format(zon) );
ZonedDateTime zond = zon.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println( DATE_TIME_FORMATTER.format(zond) );
}
}
解释一下
上面的代码片段使用Date Time Formatter来显示日期。当我们执行时,输出看起来像>。
输出

示例#3 -显示使用公历将日期对象转换为字符串值的java代码
Rule.java
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Rule {
public static void main(String[] args) throws DatatypeConfigurationException
{
GregorianCalendar gca = new GregorianCalendar();
gca.setTime(new Date());
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gca);
System.out.println(convertXmlGregorianToString(xgc));
}
public static String convertXmlGregorianToString(XMLGregorianCalendar xgc)
{
DateFormat datef = new SimpleDateFormat("MM/dd/yyyy hh:mm a z");
GregorianCalendar gCalendar = xgc.toGregorianCalendar();
Date dd = gCalendar.getTime();
String dStr = datef.format(dd);
return dStr;
}
}
解释一下
上面的java代码通过将数据对象转换为显示日期,将XML文件文档转换为java代码。它使用简单的包,如Date Format和Simple Date Format。
输出

例子#4 -使用样式表来显示日期。
.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:apply-templates select="TRSummary/TravellerRequest"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="RequestDate">
<td>
<xsl:value-of select="format-dateTime(.,'[M01]/[D01]/[Y0001]')" />
</td>
</xsl:template>
<xsl:template match="TravellerRequest">
<tr>
<xsl:apply-templates select="RequestDate"/>
</tr>
</xsl:template>
</xsl:stylesheet>
tester.xml
<?xml version="1.0"?>
<TRSummary>
<TravellerRequest>
<TravelRequestNumber>338</TravelRequestNumber>
<OriginatorName>SureshVL RonVL</OriginatorName>
<RequestDate>2020-01-09T17:51:01.67+05:30</RequestDate>
<CostCenter>800</CostCenter>
<ProjectManagerName>Prasannavl Athinavl Athinavl</ProjectManagerName>
<JobNumber>1524</JobNumber>
<ElementNumber>1454</ElementNumber>
<Remarks>remarks</Remarks>
<ExpectedTravelCost>1500</ExpectedTravelCost>
<PMC>Industry international</PMC>
</TravellerRequest>
<TravellerRequest>
<TravelRequestNumber>338</TravelRequestNumber>
<OriginatorName>SureshVL RonVL</OriginatorName>
<RequestDate>2020-01-09T17:51:01.67+05:30</RequestDate>
<CostCenter>800</CostCenter>
<ProjectManagerName>Prasannavl Athinavl Athinavl</ProjectManagerName>
<JobNumber>1234</JobNumber>
<ElementNumber>1234</ElementNumber>
<Remarks>remarks</Remarks>
<ExpectedTravelCost>1500</ExpectedTravelCost>
<PMC>Industry international</PMC>
</TravellerRequest>
</TRSummary>
解释
这里我们使用了一个带有各种元素的XML文件,并创建了XSLT。
输出

例子#5 - 使用C#的Xml日期
代码:
using System;
using System.IO;
using System.Xml;
public class test
{
public static void Main()
{
Int16 cid = 3252;
String oID = "3524f5";
DateTime orderDate = new DateTime();
orderDate = DateTime.Now;
Double price = 20.95;
XmlTextWriter writer = new XmlTextWriter (Console.Out);
writer.Formatting = Formatting.Indented;
writer.WriteStartElement("order");
writer.WriteAttributeString("date", XmlConvert.ToString(orderDate, "yyyy-MM-dd"));
writer.WriteAttributeString("time", XmlConvert.ToString(orderDate, "HH:mm:ss"));
writer.WriteElementString("orderID", oID);
writer.WriteElementString("custID", XmlConvert.ToString(cid));
writer.WriteElementString("price", XmlConvert.ToString(price));
writer.WriteEndElement();
writer.Close();
}
}
解释
上面的代码从系统中自动生成当前日期,如下图所示。XML是使用写作者方法写的,它从根元素'order'开始。
输出

结论
因此,这篇文章展示了如何在java中应用日期格式值类型,也教会了我们通过改变不同的设置来定制格式,正如在工作部分所解释的那样。