下面是javascript,请帮忙将其 写成delphi ( 积分: 100 )

  • 主题发起人 主题发起人 dt520
  • 开始时间 开始时间
D

dt520

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是javascript,请帮忙将其 写成delphi<br>//===== 某年的第n个节气为几日(从0小寒起算)<br>function sTerm(y,n) {<br>var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )<br>return(offDate.getUTCDate())<br>}<br>//主要是Date() Date.UTC() offDate.getUTCDate() 这三个javascript <br>//日期函数如何转换.
 
下面是javascript,请帮忙将其 写成delphi<br>//===== 某年的第n个节气为几日(从0小寒起算)<br>function sTerm(y,n) {<br>var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )<br>return(offDate.getUTCDate())<br>}<br>//主要是Date() Date.UTC() offDate.getUTCDate() 这三个javascript <br>//日期函数如何转换.
 
Date 对象<br>启用基本存储器并取得日期和时间。<br>dateObj = new Date(dateVal)<br><br>参数<br>dateVal<br><br>必选项。如果是数字值,dateVal 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间 的毫秒数。如果是字符串,则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX(R) 对象返回的 VT_DATE 值。<br><br>--------<br><br>Date.UTC(year, month [, date [, hour [, minute [, second [, millisecond ]]]]])<br><br>参数<br><br>year 一个 4 位数,例如 2000。 <br><br>month 从 0(一月)到 11(十二月)之间的一个整数。 <br><br>date 从 1 到 31 之间的一个整数。此参数是可选的。 <br><br>hour 从 0(午夜)到 23(深夜 11 点)之间的一个整数。 <br><br>minute 从 0 到 59 之间的一个整数。此参数是可选的。 <br><br>second 从 0 到 59 之间的一个整数。此参数是可选的。 <br><br>millisecond 从 0 到 999 之间的一个整数。此参数是可选的。 <br><br>返回<br><br>整数。 <br><br>说明<br><br>方法;返回 1970 年 1 月1 日午夜(通用时间)与参数中指定的时间之间的毫秒数。这是一个静态方法,它通过 Date 对象的构造函数进行调用,而不是通过特定的 Date 对象进行调用。这种方法使您可以创建一个采用通用时间的 Date 对象,而 Date 构造函数采用本地时间。
 
照我的理解,应该是这样的,不知道对不对:<br>function sTerm(y, n: Cardinal): TDateTime;<br>var<br> &nbsp;OffDate: Double;<br>begin<br> &nbsp;OffDate := (31556925974.7 * (y - 1900)) + (sTermInfo[n] * 60000) - MilliSecondSpan(StrToDateTime('1900-1-6 2:05'), StrToDateTime('1970-1-1 0:00'));<br> &nbsp;Result := IncMilliSecond(StrToDateTime('1970-1-1 0:00'), Trunc(OffDate));<br>end;
 
试了试可以用的。和网上的万年历得出结果一样。<br>function sTerm(y, n: Cardinal): TDateTime;<br>const<br> &nbsp;sTermInfo: Array[0..23] of Integer = (0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);<br>var<br> &nbsp;OffDate: Double;<br>begin<br> &nbsp;OffDate := (31556925974.7 * (y - 1900)) + (sTermInfo[n] * 60000) - MilliSecondSpan(StrToDateTime('1900-1-6 2:05'), StrToDateTime('1970-1-1 0:00'));<br> &nbsp;Result := IncMilliSecond(StrToDateTime('1970-1-1 0:00'), Trunc(OffDate));<br>end;<br><br>测试:2005年第二个节气“大寒”<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br> &nbsp;ShowMessage(DateTimeToStr(sTerm(2005, 1)));<br>end;<br>返回 2005-1-20 5:53:27 正确。
 
sTermInfo[n] * 60000 中有点小问题,修正了.<br><br>多谢catcatdogdog!!!
 
接受答案了.
 

Similar threads

后退
顶部