Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何使用Ant显示多个日期/时间,如您的主题“;以ant";为单位输出时间戳;_Date_Ant_Time - Fatal编程技术网

Date 如何使用Ant显示多个日期/时间,如您的主题“;以ant";为单位输出时间戳;

Date 如何使用Ant显示多个日期/时间,如您的主题“;以ant";为单位输出时间戳;,date,ant,time,Date,Ant,Time,在您的主题之一“ant中的输出时间戳”中,为了在同一个ant脚本中显示多个时间,我测试了解释的2种方式 但是,这两种解决方案不适合我,Ant总是给我相同的日期/时间 有人能解释为什么吗 我已经找到了一个解决方案(但请注意,这在我的脑海中非常好): 如果有人能向我解释如何使工作成为“ant中的输出时间戳”主题的两个解决方案之一,我将非常高兴 根据TSTAMP源,它应该工作(源)日期对象总是实例化的。也许有一些奇怪的任务在表面后面进行 我正在尝试使用这个ant构建文件 <project n

在您的主题之一“ant中的输出时间戳”中,为了在同一个ant脚本中显示多个时间,我测试了解释的2种方式

但是,这两种解决方案不适合我,Ant总是给我相同的日期/时间

有人能解释为什么吗

我已经找到了一个解决方案(但请注意,这在我的脑海中非常好):



如果有人能向我解释如何使工作成为“ant中的输出时间戳”主题的两个解决方案之一,我将非常高兴

根据TSTAMP源,它应该工作(源)日期对象总是实例化的。也许有一些奇怪的任务在表面后面进行

我正在尝试使用这个ant构建文件

<project name="testTStamp" default="xxx" basedir=".">
    <target name="testMe"> 
        <MyTimestamp> </MyTimestamp> 
        <sleep seconds="5"> </sleep> 
        <MyTimestamp> </MyTimestamp> 
    </target> 

    <macrodef name="MyTimestamp"> 
        <sequential > 
            <tstamp> 
                <format property="current.time" pattern="MM/dd/yyyy hh:mm:ss aa"/> 
            </tstamp> 
            <echo message="RUN_TIME: ${current.time}"/> 
        </sequential> 
    </macrodef>

    <target name="default"> 
        <tstamp> 
            <format property="current.time_one" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
        </tstamp> 
        <echo message="RUN_TIME: ${current.time_one}"/> 
        <sleep seconds="5"> </sleep> 
        <tstamp> 
            <format property="current.time_two" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
        </tstamp> 
        <echo message="RUN_TIME: ${current.time_two}"/> 
    </target> 

    <target name='xxx' depends='default, testMe' />
</project>

好的,如果在默认目标中,我确实更改了format属性的名称,它就可以工作了。所以后面有一些缓存魔法。

在Ant中是不可变的;它们不是变量

但是,通过使用任务,您可能可以实现您想要的。此任务导致仅在本地指定
目标
(或
顺序
,或任何其他块)中随后设置的属性


因此,如果所有的时间戳回音都在不同的目标中,那么它就会工作。在单个目标中,您仍然需要使用多个属性,如“time\u start”、“time\u end”等。

在本线程的后续部分,我了解到macrodef是一种更合适的方法,因为它在每次调用时都会不断实例化,因此不会出现缓存问题。我简化了他们的例子。我包含了我的整个文件,所以您可以将下面的代码保存为clock.xml,并直接从ant运行它

<project name="marktime" basedir=".">
<description>
    logstamp is a simple macrodef for ANT to echo a time stamp out to an open log.
    It is not written to pass back the current time, just simple echo to stdout.
            You are welcome to add which file to output the results to, add blurbs to messages.

</description>

<macrodef name="logstamp">
  <sequential>
  <local name="logtime"/>
  <tstamp>
    <format property="logtime" pattern="yyyy.MM.dd : HH:mm:ss z"/>
  </tstamp>
  <echo  message=" ### Current time now: ${logtime}"/>
  </sequential>
</macrodef>

<target
name="init"
description="boilerplate for all targets">
    <!-- Just run the Macrodef -->
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
<sleep seconds="5"> </sleep> 
<logstamp/>
</target>
</project>

根据Bee Kay的回答,此宏与ANT版本1.7配合使用,避免使用“local”,而是在“macrodef”上使用“attribute”:

<project name="echotime" basedir="." default="echotime">
<description>
echotime is a simple macrodef for ANT to echo a time stamp to an open log.
It is not written to pass back the current time, just simple echo to stdout.
</description>

<macrodef name="echotime">
    <attribute name="logtime" default="" />
    <sequential>
        <tstamp>
            <format property="logtime" pattern="yyyy.MM.dd HH:mm:ss z" />
        </tstamp>
        <echo message="Build finished at ${logtime}" />
    </sequential>
</macrodef>

<target name="echotime">
    <echo message="${ant.version}" />
    <echotime />
</target>

如果我的内存没有出现故障,如果使用标记,则可以在运行时访问${DSTAMP}和${TSTAMP},然后格式化它们。但是我可能误解了你的问题。是的,但是这个网站上的代码示例对我来说不起作用:尝试使用这里和just use中显示的标准指令是的,但是我也需要几秒钟,所以我必须使用模式,不是吗?我发布了我尝试过的解决方案的2个链接,但没有成功,感谢您的回复,我不高兴不解决这个问题,这需要我1百万Php…我尝试了与您的任务相同的方法,但没有宏(所以直接在后面使用。这不是格式问题,只是时间戳似乎总是一样的。似乎一旦通过TSTAMP调用,您只能通过使用偏移量来修改它,但这对我来说毫无意义。这让我发疯!!!这个代码示例看起来很好,为什么它不起作用?这不是逻辑!@Jeffberth!@on:检查我的示例中的默认任务,它实际上是有效的。我想可能涉及到一些缓存。黑客攻击TSTAMP的源代码我已经检查了java.util.Date对象是在任务执行时分配的,所以它应该可以工作。如果使用不同的属性名称,它就可以工作。但是这很奇怪。嗨,BigMike,它实际上是唯一我找到了解决方案,但它不符合逻辑……如果我想在同一个Ant脚本中显示5个日期/时间,我必须声明5个不同的属性/名称……我继续这样做……感谢您查看我的问题;-)再见。@Jeffberton同意,这很奇怪。此解决方案使用的是Ant v1.8或更高版本。
C:\desktop\>ant -f clock.xml init
Buildfile: C:\desktop\clock.xml

init:
     [echo]  ### Current time now: 2014.02.14 : 16:41:06 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:11 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:16 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:21 PST
     [echo]  ### Current time now: 2014.02.14 : 16:41:26 PST

BUILD SUCCESSFUL
Total time: 20 seconds
<project name="echotime" basedir="." default="echotime">
<description>
echotime is a simple macrodef for ANT to echo a time stamp to an open log.
It is not written to pass back the current time, just simple echo to stdout.
</description>

<macrodef name="echotime">
    <attribute name="logtime" default="" />
    <sequential>
        <tstamp>
            <format property="logtime" pattern="yyyy.MM.dd HH:mm:ss z" />
        </tstamp>
        <echo message="Build finished at ${logtime}" />
    </sequential>
</macrodef>

<target name="echotime">
    <echo message="${ant.version}" />
    <echotime />
</target>
>ant -buildfile echotime.xml
Buildfile: echotime.xml

echotime:
     [echo] Apache Ant version 1.7.1 compiled on June 27 2008
     [echo] Build finished at 2019.12.19 11:43:29 EST

BUILD SUCCESSFUL
Total time: 0 seconds