* Bug 16504 fixed: clock() upgraded (time zone, daylight ST) 48/21548/4
Samuel GOUGEON [Thu, 23 Jul 2020 20:25:05 +0000 (22:25 +0200)]
  http://bugzilla.scilab.org/16504

  clock page (PDF): http://bugzilla.scilab.org/attachment.cgi?id=5162

Change-Id: I037c477aafd18b6aba6d90b7b1c52784bb6cd605

scilab/CHANGES.md
scilab/modules/time/help/en_US/clock.xml
scilab/modules/time/help/ja_JP/clock.xml [deleted file]
scilab/modules/time/macros/clock.sci
scilab/modules/time/tests/unit_tests/clock.tst [new file with mode: 0644]

index 2ef0687..08f200e 100644 (file)
@@ -201,6 +201,7 @@ Feature changes and additions on 6.1.1
   - It can now sort any sparse 2D matrix, in all `g, r, c, lr, lc` methods, including sparse booleans and in multi-level mode. It was formerly limited to sparse real or complex vectors and only to the `g` mode.
   - Any hypermatrix can be sorted along a dimension > 2.
 * `unique` is enabled for any 2D sparse arrays, in simple, 'c' and 'r' modes.
+<<<<<<< HEAD
 * `%chars` constant added, to easily access to some selected sets of unicode symbols.
 * Lists are displayed in a more compact and comprehensive way.
 * `interp1` is upgraded:
@@ -214,6 +215,9 @@ Feature changes and additions on 6.1.1
   - bitnum can actually be an array. It is now optional as well for input decimal integers.
 * The `Arnoldi` module is now internal.
 * `sgolay` and the companion `sgolayfilter` and `sgolaydiff` functions have been added to implement Savitsky-Golay filters.
+=======
+* `clock` now returns the milliseconds, the time zone, and the daylight saving time.
+>>>>>>> 6436aedaa9e (* Bug 16504 fixed: clock() upgraded (time zone, daylight ST))
 
 Help pages:
 -----------
@@ -363,6 +367,7 @@ Bug Fixes
 * [#16476](https://bugzilla.scilab.org/16476): `issquare` was not overloaded.
 * [#16488](https://bugzilla.scilab.org/16488): Concatenations mixing boolean and double with at least one operand being sparse were not supported.
 * [#16496](https://bugzilla.scilab.org/16496): The `getdate` page should be rewritten: a) `getdate("s")` does NOT take leap seconds into account. b) `D=getdate(X)` is vectorized, accepts fractional seconds and returns them in `[0,1)` in D(10) instead of milliseconds. Moreover, the time referential of the result was unclear (time zone, daylight saving offset).
+* [#16504](https://bugzilla.scilab.org/16504): `clock` returned none of the milliseconds, time zone, and daylight saving time.
 * [#16508](https://bugzilla.scilab.org/16508): csvTextScan and csvRead did not handle well complex data.
 * [#16512](https://bugzilla.scilab.org/16512): 1 ./ uint8(0) crashes Scilab (idem with int8, uint16, int16, uint32, int32, uint64, int64).
 * [#16517](https://bugzilla.scilab.org/16517): `getdate("s")` truncated the actual time to integer seconds. `getdate(u)(10)` returned fractional seconds instead of milliseconds as `getdate()`.
@@ -381,6 +386,7 @@ Bug Fixes
 * [#16644](https://bugzilla.scilab.org/16644): `input("message:")` yielded a wrong error message about `mprintf` in case of non-interpretable input.
 * [#16654](https://bugzilla.scilab.org/16654): `interp` was leaking memory.
 
+
 ### Bugs fixed in 6.1.0:
 * [#2694](https://bugzilla.scilab.org/2694): `bitget` did not accept positive integers of types int8, int16 or int32.
 * [#5824](https://bugzilla.scilab.org/5824): The `datafit` algorithm was not documented.
index 828f8d3..c3b0e35 100644 (file)
@@ -2,8 +2,8 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) INRIA -
- *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ * Copyright (C) 2020 - Samuel GOUGEON
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
  * pursuant to article 5.3.4 of the CeCILL v.2.1.
  * along with this program.
  *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="clock">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+          xmlns:svg="http://www.w3.org/2000/svg" xmlns:db="http://docbook.org/ns/docbook"
+          xmlns:scilab="http://www.scilab.org" xml:lang="en" xml:id="clock">
     <refnamediv>
         <refname>clock</refname>
-        <refpurpose>Return current time as date vector</refpurpose>
+        <refpurpose>
+            Return the current Gregorian datetime and international time zone of the computer's clock
+        </refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
-        <synopsis>c = clock()</synopsis>
+        <synopsis>[datetime, timezone, Dst] = clock()</synopsis>
     </refsynopsisdiv>
     <refsection>
+        <title>Arguments</title>
+        <variablelist>
+            <varlistentry>
+                <term>datetime</term>
+                <listitem>
+                    [year, month, day, hour, minute, second] vector.
+                    The first five elements are integers. The <literal>second</literal> element
+                    is accurate up to the millisecond.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>timezone</term>
+                <listitem>
+                    A scalar multiple of 0.25 in [-12, 12]. Most of geographical areas have an
+                    integer time zone. A few are on a half-an-hour or even a quarter time zone.
+                    <varname>timezone</varname> &lt; 0 for Brasil, and > 0 for France, Russia,
+                    and Japan, etc.
+                    <para/>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>Dst</term>
+                <listitem>
+                    0 or 1: Daylight saving time. 1 if the time area of the computer is registered
+                    to apply a Daylight saving time offset, and currently applies it ; 0 otherwise.
+                    <para/>
+                </listitem>
+            </varlistentry>
+        </variablelist>
+    </refsection>
+    <refsection>
         <title>Description</title>
-        <para>c = clock() returns a 6-element date vector containing the current date and time in decimal form:</para>
-        <para>c = [year month day hour minute seconds]</para>
-        <para>the first five elements are integers. The seconds element is accurate to several digits beyond the decimal point.</para>
+        <para>
+            <emphasis role="bold">clock()</emphasis> returns the current state of the clock
+            of the computer. This clock is registered for a given time zone and area, and
+            provides the local legal time.
+        </para>
+        <warning>
+            The time zone of the computer can also be retrieved through the computer's OS.
+            However, when a Daylight saving time offset applies, the returned
+            time zone may include it.
+        </warning>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-clock()
- ]]></programlisting>
+[datetime, tz, Dst] = clock()
+     ]]></programlisting>
+        <screen><![CDATA[
+--> [datetime, tz, Dst] = clock()
+ datetime  =
+   2020.   7.   23.   21.   26.   36.979
+
+ tz  =
+   1.
+
+ Dst  =
+   1.
+]]></screen>
+        <para>
+            More information, on Windows:
+        </para>
+        <programlisting role="example"><![CDATA[
+powershell("Get-Timezone")(3:8)
+     ]]></programlisting>
+        <screen><![CDATA[
+--> powershell("Get-Timezone")(3:8)
+ ans  =
+  "Id                         : Romance Standard Time"
+  "DisplayName                : (UTC+01:00) Bruxelles, Copenhague, Madrid, Paris"
+  "StandardName               : Paris, Madrid"
+  "DaylightName               : Paris, Madrid (heure d'été)"
+  "BaseUtcOffset              : 01:00:00"
+  "SupportsDaylightSavingTime : True"
+]]></screen>
     </refsection>
     <refsection role="see also">
         <title>See also</title>
         <simplelist type="inline">
             <member>
-                <link linkend="datenum">datenum</link>
+                <link linkend="getdate">getdate</link>
             </member>
             <member>
                 <link linkend="datevec">datevec</link>
             </member>
             <member>
-                <link linkend="timer">timer</link>
-            </member>
-            <member>
-                <link linkend="etime">etime</link>
-            </member>
-            <member>
-                <link linkend="tic">tic</link>
+                <link linkend="datenum">datenum</link>
             </member>
             <member>
-                <link linkend="toc">toc</link>
+                <link linkend="calendar">calendar</link>
             </member>
         </simplelist>
     </refsection>
+    <refsection role="history">
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Time zone and Daylight saving time outputs added.
+                </revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
diff --git a/scilab/modules/time/help/ja_JP/clock.xml b/scilab/modules/time/help/ja_JP/clock.xml
deleted file mode 100644 (file)
index 1658e90..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) INRIA -
- *
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="ja" xml:id="clock">
-    <refnamediv>
-        <refname>clock</refname>
-        <refpurpose>現在の時間を日付ベクトルとして返す</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>呼び出し手順</title>
-        <synopsis>c = clock()</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>説明</title>
-        <para>c = clock() は,現在の10進形式の日付と時間を有する要素数6の日付ベクトル
-            を返します:
-        </para>
-        <para>c = [年 月 日 時間 分 秒]</para>
-        <para>最初の5つの要素は整数です.2番目の要素は小数点以下数桁まで正確です.</para>
-    </refsection>
-    <refsection>
-        <title>例</title>
-        <programlisting role="example"><![CDATA[
-clock()
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>参照</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="datenum">datenum</link>
-            </member>
-            <member>
-                <link linkend="datevec">datevec</link>
-            </member>
-            <member>
-                <link linkend="timer">timer</link>
-            </member>
-            <member>
-                <link linkend="etime">etime</link>
-            </member>
-            <member>
-                <link linkend="tic">tic</link>
-            </member>
-            <member>
-                <link linkend="toc">toc</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
index eab097b..264e09f 100644 (file)
@@ -1,8 +1,8 @@
 //------------------------------------------------------------------------
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA - Pierre MARECHAL
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2020 - Samuel GOUGEON
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 // pursuant to article 5.3.4 of the CeCILL v.2.1.
 // Return the current date and time as serial number
 //------------------------------------------------------------------------
 
-function t=clock()
-    t=datevec(datenum());
+function [t, tz, Dst] = clock()
+    t = getdate()
+    t(9) = t(9) + t(10)/1000
+    t([3:5 10]) = []
+
+    // Time zone
+    if argn(1) > 1 then
+        tz = getdate(0)
+        tz = tz(7) + tz(8)/60
+        if tz > 12
+            tz = tz - 24
+        end
+    end
+
+    // Daylight saving time
+    if argn(1) > 2 then
+        tm = getdate()
+        ts = getdate("s")
+        dt = (datenum(tm([1 2 6 7 8 9])) - datenum([1970 1 1 0 0 0]))*24-ts/3600
+        Dst = ceil(int((dt - tz)*100)/100)
+    end
 endfunction
diff --git a/scilab/modules/time/tests/unit_tests/clock.tst b/scilab/modules/time/tests/unit_tests/clock.tst
new file mode 100644 (file)
index 0000000..842400f
--- /dev/null
@@ -0,0 +1,42 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+// unit tests for clock() function
+// =============================================================================
+
+
+[t, tz, Dst] = clock();
+assert_checkequal(size(t), [1 6]);
+assert_checktrue(and(t(1:5) ==int(t(1:5))));
+assert_checktrue(t(1) >= 2020);
+assert_checktrue(t(2) >= 1 & t(2) <= 12);
+assert_checktrue(t(3) >= 1 & t(3) <= 31);
+assert_checktrue(t(4) >= 0 & t(4) < 24);
+assert_checktrue(t(5) >= 0 & t(5) < 60);
+assert_checktrue(t(6) >= 0 & t(6) < 60);
+
+// Time Zone
+assert_checktrue(tz > -13 & tz < 13);
+assert_checktrue(modulo(tz,0.25)==0);
+if getos()=="Windows" then
+    r = powershell("Get-TimeZone");
+    i = grep(r,"(UTC")
+    [s,e,m,f] = regexp(r(i), "/\(UTC(...)\:(..)\)/")
+    tzRef = evstr(f);
+    assert_checkequal([int(tz) round((tz-int(tz))*60)], tzRef);
+end
+
+// Daylight Saving Time
+assert_checktrue(or(Dst==[0 1]));