【问题标题】:Time Format - Coldfusion 9时间格式 - Coldfusion 9
【发布时间】:2012-07-18 21:58:36
【问题描述】:

我正在尝试在冷融合中创建一个包含毫秒的时间戳。

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

这是我的格式:

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

我只需要像“HH:mm:ssll”这样的东西或其他一些方法来确保我始终拥有一个 9 位数的时间戳。

【问题讨论】:

    标签: datetime coldfusion timestamp coldfusion-9


    【解决方案1】:

    前导零的毫秒数?

    <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。
    【解决方案2】:

    使用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 - 带有前导零

    【讨论】:

    • 这并不能真正回答所提出的问题,是吗?
    • 如果您使用掩码“HH:mm:ss.SSS”,它将产生一致的 9 位时间戳。我举了一个完整的示例掩码作为示例,因此它不会与 timeFormat() 以及它无法处理日期部分混淆。
    • 三个 SSS 在毫秒内为您提供前导零
    【解决方案3】:

    当你说:

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

    只需添加第三个“l”即可获得正确数量的占位符:

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

    【讨论】:

      【解决方案4】:
          <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()
      • 为什么不呢?我认为降低到毫秒就足以创建一个唯一的时间戳。
      • 因为调用一个函数并不总是花费超过一毫秒(或者确实阻止其他线程同时调用它),并且 RandRange 提供随机数,而不是唯一数 - 这是可能的(尽管不太可能) RandRange 可以连续两次返回相同的值,如果这与在同一毫秒内调用的函数相吻合,那么就会发生冲突。 (不是可能事件,而是可能事件。)
      • 您可以在函数中使用合适的锁来解决它,但更好的解决方案是简单地使用旨在提供保证唯一 id 的内置函数 - 即 createUuid
      猜你喜欢
      • 2012-10-23
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多