libsim  Versione 7.2.1

◆ datetime_getval()

pure subroutine datetime_getval ( type(datetime), intent(in)  this,
integer, intent(out), optional  year,
integer, intent(out), optional  month,
integer, intent(out), optional  day,
integer, intent(out), optional  hour,
integer, intent(out), optional  minute,
integer, intent(out), optional  msec,
integer(kind=int_ll), intent(out), optional  unixtime,
character(len=*), intent(out), optional  isodate,
character(len=*), intent(out), optional  simpledate,
character(len=12), intent(out), optional  oraclesimdate 
)

Restituisce il valore di un oggetto datetime in una o pi� modalit� desiderate.

Qualsiasi combinazione dei parametri opzionali � consentita. oraclesimedate � obsoleto, usare piuttosto simpledate.

Parametri
[in]thisoggetto di cui restituire il valore
[out]yearanno
[out]monthmese
[out]daygiorno
[out]hourore
[out]minuteminuti
[out]msecmillisecondi
[out]unixtimesecondi a partire dal 1/1/1970
[out]isodatedata completa nel formato AAAA-MM-GG hh:mm:ss.msc (simil-ISO), la variabile pu� essere pi� corta di 23 caratteri, in tal caso conterr� solo ci� che vi cape
[out]simpledatedata completa nel formato AAAAMMGGhhmmssmsc , la variabile pu� essere pi� corta di 17 caratteri, in tal caso conterr� solo ci� che vi cape, da preferire rispetto a oraclesimdate
[out]oraclesimdatedata parziale nel formato AAAAMMGGhhmm

Definizione alla linea 885 del file datetime_class.F90.

887 !! forniti, ovviamente non fornire un parametro equivale a fornirlo =0.
888 !! Questa � la versione \c FUNCTION, in stile F2003, del costruttore, da preferire
889 !! rispetto alla versione \c SUBROUTINE \c init.
890 FUNCTION timedelta_new(year, month, day, hour, minute, sec, msec, &
891  isodate, simpledate, oraclesimdate) RESULT (this)
892 INTEGER,INTENT(IN),OPTIONAL :: year
893 INTEGER,INTENT(IN),OPTIONAL :: month
894 INTEGER,INTENT(IN),OPTIONAL :: day
895 INTEGER,INTENT(IN),OPTIONAL :: hour
896 INTEGER,INTENT(IN),OPTIONAL :: minute
897 INTEGER,INTENT(IN),OPTIONAL :: sec
898 INTEGER,INTENT(IN),OPTIONAL :: msec
899 CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate
900 CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate
901 CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate
902 
903 TYPE(timedelta) :: this
904 
905 CALL timedelta_init(this, year, month, day, hour, minute, sec, msec, &
906  isodate, simpledate, oraclesimdate)
907 
908 END FUNCTION timedelta_new
909 
910 
915 SUBROUTINE timedelta_init(this, year, month, day, hour, minute, sec, msec, &
916  isodate, simpledate, oraclesimdate)
917 TYPE(timedelta),INTENT(INOUT) :: this
918 INTEGER,INTENT(IN),OPTIONAL :: year
919 INTEGER,INTENT(IN),OPTIONAL :: month
920 INTEGER,INTENT(IN),OPTIONAL :: day
921 INTEGER,INTENT(IN),OPTIONAL :: hour
922 INTEGER,INTENT(IN),OPTIONAL :: minute
923 INTEGER,INTENT(IN),OPTIONAL :: sec
924 INTEGER,INTENT(IN),OPTIONAL :: msec
925 CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate
926 CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate
927 CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate
928 
929 INTEGER :: n, l, lyear, lmonth, d, h, m, s, ms
930 CHARACTER(len=23) :: datebuf
931 
932 this%month = 0
933 
934 IF (PRESENT(isodate)) THEN
935  datebuf(1:23) = '0000000000 00:00:00.000'
936  l = len_trim(isodate)
937 ! IF (l > 0) THEN
938  n = index(trim(isodate), ' ') ! align blank space separator
939  IF (n > 0) THEN
940  IF (n > 11 .OR. n < l - 12) GOTO 200 ! wrong format
941  datebuf(12-n:12-n+l-1) = isodate(:l)
942  ELSE
943  datebuf(1:l) = isodate(1:l)
944  ENDIF
945 ! ENDIF
946 
947 ! datebuf(1:MIN(LEN(isodate),23)) = isodate(1:MIN(LEN(isodate),23))
948  READ(datebuf,'(I4,I2,I4,1X,I2,1X,I2,1X,I2,1X,I3)', err=200) lyear, lmonth, d, &
949  h, m, s, ms
950  this%month = lmonth + 12*lyear
951  this%iminuti = 86400000_int_ll*int(d, kind=int_ll) + &
952  3600000_int_ll*int(h, kind=int_ll) + 60000_int_ll*int(m, kind=int_ll) + &
953  1000_int_ll*int(s, kind=int_ll) + int(ms, kind=int_ll)
954  RETURN
955 
956 200 CONTINUE ! condizione di errore in isodate
957  CALL delete(this)
958  CALL l4f_log(l4f_error, 'isodate '//trim(isodate)//' not valid')
959  CALL raise_error()
960 
961 ELSE IF (PRESENT(simpledate)) THEN
962  datebuf(1:17) = '00000000000000000'
963  datebuf(1:min(len(simpledate),17)) = simpledate(1:min(len(simpledate),17))
964  READ(datebuf,'(I8.8,3I2.2,I3.3)', err=220) d, h, m, s, ms
965  this%iminuti = 86400000_int_ll*int(d, kind=int_ll) + &
966  3600000_int_ll*int(h, kind=int_ll) + 60000_int_ll*int(m, kind=int_ll) + &
967  1000_int_ll*int(s, kind=int_ll) + int(ms, kind=int_ll)
968 
969 220 CONTINUE ! condizione di errore in simpledate
970  CALL delete(this)
971  CALL l4f_log(l4f_error, 'simpledate '//trim(simpledate)//' not valid')
972  CALL raise_error()
973  RETURN
974 
975 ELSE IF (PRESENT(oraclesimdate)) THEN
976  CALL l4f_log(l4f_warn, 'in timedelta_init, parametro oraclesimdate '// &
977  'obsoleto, usare piuttosto simpledate')
978  READ(oraclesimdate, '(I8,2I2)')d, h, m
979  this%iminuti = 86400000_int_ll*int(d, kind=int_ll) + &
980  3600000_int_ll*int(h, kind=int_ll) + 60000_int_ll*int(m, kind=int_ll)
981 
982 ELSE IF (.not. present(year) .and. .not. present(month) .and. .not. present(day)&
983  .and. .not. present(hour) .and. .not. present(minute) .and. .not. present(sec)&
984  .and. .not. present(msec) .and. .not. present(isodate) &
Index method.

Generated with Doxygen.