delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2013/01/24/05:01:58

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: <DUB117-W6214C06B8452D8B91EE297A7140@phx.gbl>
From: Marten Jan de Ruiter <martenjanderuiter AT hotmail DOT com>
To: <cygwin AT cygwin DOT com>
Subject: Intel FORTRAN time_and_date function returns UTC instead of local time
Date: Thu, 24 Jan 2013 11:01:39 +0100
MIME-Version: 1.0
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
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


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019