时间格式-Coldfusion 9

5

我想在ColdFusion中创建一个时间戳,包括毫秒。

我的问题是,我无法找到任何代码可以通过控制前导零来保持格式一致。

这是我的格式:

<cfoutput> 
<cfset todayDate = #Now()#> 
<ul> 
    <li>#TimeFormat(todayDate, "HH:mm:ssl")# </li>
</ul> 
</cfoutput>  

我只需要像“HH:mm:ssll”或其他方法,以确保我始终拥有9位数字的时间戳。
4个回答

8

开头有零的毫秒数?

<li>
  #TimeFormat(todayDate, "HH:mm:ss")##NumberFormat(TimeFormat(todayDate, "l"),"000")#
</li>

提供信息,l 最多只有3位数字。因此,我不确定你所说的9位数字限制。


9位数字应该是HH-MM-SS-ZZZ,这就是我所说的9位数字。我运行了我发布的示例测试代码,有时会得到像10-45-34-56这样的结果,而我需要的是10-45-34-056。 - Geo

8
使用java SimpleDateFormat
<cfscript>
   createObject('java','java.text.SimpleDateFormat').init('yyyy-MM-dd HH:mm:ss.SSS Z').format(now());
</cfscript>

生成 2010年07月19日 11:40:14.051 EST

<cfscript>
   createObject('java','java.text.SimpleDateFormat').init('HH:mm:ss.SSS').format(now());
</cfscript>

生成带前导零的09:45:12.009


1
这并没有真正回答被问出来的问题,是吗? - Adam Cameron
2
如果使用掩码“HH:mm:ss.SSS”,它将生成一致的9位时间戳。我提供了一个完整的示例掩码,以免与timeFormat()混淆并且无法处理日期部分。 - Mike Causer
2
三个 SSS 可以在毫秒前面添加前导零。 - Mike Causer

2

当你说:

我只需要像“HH:mm:ssll”这样的东西...

你已经差不多答对了,只需再加一个“l”,就可以得到正确数量的占位符:

<cfoutput> 
    <cfset todayDate = #Now()#> 
        <ul> 
            <li>#TimeFormat(todayDate, "HH:mm:sslll")# </li>
        </ul> 
</cfoutput>  

0
    <cfscript>
    function getUniqueID() {
        rightNow = now();
return (dateformat(rightNow,'yyyymmdd') & timeformat(rightNow,"HHmmss") &NumberFormat(TimeFormat(rightNow, "l"),"000") & RandRange(10000, 99999));

    }
    </cfscript>

<cfdump var="#getUniqueID()#">

分享一下我的代码,以防有人需要为任何目的创建独特的时间戳。

感谢Henry提供代码中 NumberFormat 的部分


除非保证是唯一的ID,否则不能使用它。如果需要唯一性,请使用createUuid(),如果需要时间戳前缀,请使用getTickCount() - Peter Boughton
为什么不呢?我以为精确到毫秒就足够创建一个独特的时间戳了。 - Geo
2
因为调用函数并不总是需要超过一毫秒的时间(或者确实阻止其他线程同时调用它),而 RandRange 提供的是随机数,而不是唯一的数字——虽然可能性较小,但 RandRange 可能会连续两次返回相同的值,如果这与函数在同一毫秒内被调用,则会发生冲突。(这不是一个_可能_事件,但是有可能发生。) - Peter Boughton
2
你可以在函数中使用适当的锁来解决这个问题,但更好的解决方法是直接使用内置函数来生成一个保证唯一的id - 例如createUuid - Peter Boughton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接