正在查看: 标记有标签 日期 的文章(第 1 页 / 共 2 篇)

使用XSLT进行日期格式转换

现在有个问题需要用XSLT来实现,那就是在XSLT中如何将一个日期结点的格式由YYYY-MM-DD转换到DD/MM/YYYY?

我首先想到的就是利用XSLT中的带参数的模板,将此原始日期作为参数参数一个模板中,然后进行重新组合。说起来晕乎乎,还是直接进入实战吧。

假设现在有一个XML文档,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="format_date.xsl"?>
<notebooks>
 <notebook>
  <title>红花还需绿叶衬,我是标题一</title>
  <date>2009-08-11</date>
 </notebook>
 <notebook>
  <title>红花还需绿叶衬,我是标题二</title>
  <date>2009-08-10</date>
 </notebook>
</notebooks>

在这个文档中,结点的日期为2009-08-11,即格式为YYYY-MM-DD,现在我们需要利用XSLT将其转换成DD/MM/YYYY,也就是11/08/2009。

关于实现思路,我在上面已经讲到,不再赘述。这里讲讲具体实现,一个带参数的XSLT模板:

<xsl:template name="FormatDate">
 <!--Convert Old Date Format:yyyy-mm-dd to New Date Format: dd/mm/yyyy-->
 <xsl:param name="DateTime" />
 <xsl:variable name="y">
      <xsl:value-of select="substring($DateTime,1,4)" />
    </xsl:variable>
    <xsl:variable name="m_temp">
  <xsl:value-of select="substring-after($DateTime,'-')" />
 </xsl:variable>
    <xsl:variable name="m">
      <xsl:value-of select="substring($m_temp,1,2)" />
    </xsl:variable>
    <xsl:variable name="d_temp">
      <xsl:value-of select="substring-after($m_temp,'-')" />
    </xsl:variable>
    <xsl:variable name="d">
      <xsl:value-of select="substring($d_temp,1,2)" />
    </xsl:variable>
    <xsl:value-of select="$d"/>
    <xsl:value-of select="'/'"/>
    <xsl:value-of select="$m"/>
    <xsl:value-of select="'/'"/>
    <xsl:value-of select="$y"/>
</xsl:template>

如果对XSLT有所了解,相信上面的代码非常直观;如果不太了解,那么首先你应该去了解,或者在下面留言……

在XSLT中,我一直将模板当作其他程序语言中的函数。理解了这一点,上面这段程序就很好理解了,那个参数Datetime就像是程序语言中的入口参数,用来接受外部送给这个“函数”的参数。

需要注意的地方是,上面的19-23行,这是最后对日期各个部分(年、月、日)进行组合。换言之,你可以组合出任意你可以想出的日期格式,不限于此。

但这里只写了“函数”了部分,没有提到调用,调用方法如下:

<xsl:call-template name="FormatDate">
 <xsl:with-param name="DateTime" select="date"/>
</xsl:call-template>

在此例中,我将date这个结点的值传给了“函数”的参数。

完整的XSLT文件和最后的结果请分别这里这里

JAVA实现向上取整、Unix时间戳到普通日期转换等函数

最近正在做的一个项目使用Java在同一个客户端中Consume多个REST类型的WebService,包括Yahoo! Search API, YouTube Video APIFlickr

我这里想说的不是如何使用Java来调用这几个知名的WebService,而是我个人在客户端制作过程中编写的几个简单实用的函数。关于Java调用WebService的具体方法和方案,我会在稍后的系列日志中详细说明。

说明:由于我本人也是正式接触Java不久,如果以下函数有不妥的地方,请告诉我。

1、Java中的向上取整:

我们知道,在PHP中如果要对一个浮点数进行向上取整操作,只需要使用PHP的内置函数ceil即可。

比如,要将1/3向上取整为1,只需要如下操作:

echo ceil(1/3);

那么在Java中,我们也可以编写一个小函数来实现上面的功能:

public int ceil(int a, int b){
    return(((double)a/(double)b)>(a/b)?a/b+1:a/b);
}

2、Java中将Unix时间戳字符串转换成普通日期格式。

//Convert Unix timestamp to normal date style
private String TimeStamp2Date(String timestampString){
  Long timestamp = Long.parseLong(timestampString)*1000;
  String date = new java.text.SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(new java.util.Date(timestamp));
  return date;
}

在调用Yahoo! News Search的WebService中,当我们提交了一个REST请求之后,假定Yahoo服务器回传给我们一个XML格式文档(假定是因为REST可以以多种格式回传数据流,比如JSON和CSV),此时每条新闻的日期均采用Unix时间戳来显示。在实际运用中,我们需要将它们转换成人们可以理解的正常格式。这就用到了下面我写的这个简单函数。

FAQ:什么是Unix时间戳?

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

Tags: java,日期