X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org X-EIP: [iURCqN/ASX/1GD93O9sZo/3E+mcxROwL] Message-ID: From: Marten Jan de Ruiter To: Subject: Intel FORTRAN time_and_date function returns UTC instead of local time Date: Thu, 24 Jan 2013 11:01:39 +0100 Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id r0OA1rnL024626 I wrote a FORTRAN program using the time_and_date function. The source follows below. The time_and_date function returns the wrong time: I am not in UTC, so czone should be +0100. In the following output, the lines "ctime:..." to "milliseconds..." are based on time_and_date. The line 15:54:49 is the correct time obtained by the time function, and the line 23-JAN-13 is the correct date obtained by the date function. ctime: 20130123 cdate: 145449.947 czone: -0000 @ 2013-01-23 14:54:49.947 year 2013 month 1 day 23 diff wrt UTC 0 minutes hours 14 minutes 54 seconds 49 milliseconds 947 15:54:49 23-JAN-13 I have done some experiments to narrow down the problem: * compiling with gfortran: time_gfortran.exe gives correct result in Cygwin * compiling with g95: time_g95.exe gives the correct result in Cygwin * compiling with ifort: time_ifort.exe gives the wrong time in Cygwin After copying cygwin1.dll, cyggfortran-3.dll and cyggcc_s-1.dll to the working directory, I get correct results using the three executables in c:\windows\system32\cmd.exe. I suspect that the intel compiler does a different system call for time_and_date than for date and time, that the system call is intercepted by Cygwin, and not properly handled. I am still baffled why the same source runs fine for gfortran and g95. Notice however that for these compilers, the _date_ and _time_ functions are not defined. Hence the preprocessor exclusion in the source. Does anyone know how I can trace the system calls of my executables? Regards, Marten Jan The following example comes from the documentation of Intel: Consider the following example executed on 2000 March 28 at 11:04:14.5: INTEGER DATE_TIME (8) CHARACTER (LEN = 12) REAL_CLOCK (3) CALL DATE_AND_TIME (REAL_CLOCK (1), REAL_CLOCK (2), & REAL_CLOCK (3), DATE_TIME) This assigns the value "20000328" to REAL_CLOCK (1), the value "110414.500" to REAL_CLOCK (2), and the value "-0500" to REAL_CLOCK (3). The following values are assigned to DATE_TIME: 2000, 3, 28, -300, 11, 4, 14, and 500. The following is the source of my program: program time_and_date implicit none character (len=8) cdate character (len=10) ctime character (len=5) czone integer(4) ival(8) integer(4) yr,mon,day,hr,min,sec,ms call date_and_time(cdate,ctime,czone,ival) read (cdate(1:4),*) yr read (cdate(5:6),*) mon read (cdate(7:8),*) day read (ctime(1:2),*) hr read (ctime(3:4),*) min read (ctime(5:6),*) sec read (ctime(8:10),*) ms print *,'cdate ',cdate print *,'ctime ',ctime print *,'czone ',czone print "('@ ',i4,'-',i2.2,'-',i2.2,' ',i2.2,':',i2.2,':',i2.2,'.',i3.3)", yr,mon,day,hr,min,sec,ms print *,'year ',ival(1) print *,'month ',ival(2) print *,'day ',ival(3) print *,'diff wrt UTC ',ival(4),' minutes' print *,'hours ',ival(5) print *,'minutes ',ival(6) print *,'seconds ',ival(7) print *,'milliseconds ',ival(8) print * #ifdef IFORT call time(ctime) print *,ctime call date(ctime) print *,ctime #endif print *,'done' end program -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple