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 )
private

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 875 del file datetime_class.F90.

877
878#include "arrayof_post.F90"
879
880
881! ===============
882! == timedelta ==
883! ===============
890FUNCTION timedelta_new(year, month, day, hour, minute, sec, msec, &
891 isodate, simpledate, oraclesimdate) RESULT (this)
892INTEGER,INTENT(IN),OPTIONAL :: year
893INTEGER,INTENT(IN),OPTIONAL :: month
894INTEGER,INTENT(IN),OPTIONAL :: day
895INTEGER,INTENT(IN),OPTIONAL :: hour
896INTEGER,INTENT(IN),OPTIONAL :: minute
897INTEGER,INTENT(IN),OPTIONAL :: sec
898INTEGER,INTENT(IN),OPTIONAL :: msec
899CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate
900CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate
901CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate
902
903TYPE(timedelta) :: this
904
905CALL timedelta_init(this, year, month, day, hour, minute, sec, msec, &
906 isodate, simpledate, oraclesimdate)
907
908END FUNCTION timedelta_new
909
910
915SUBROUTINE timedelta_init(this, year, month, day, hour, minute, sec, msec, &
916 isodate, simpledate, oraclesimdate)
917TYPE(timedelta),INTENT(INOUT) :: this
918INTEGER,INTENT(IN),OPTIONAL :: year
919INTEGER,INTENT(IN),OPTIONAL :: month
920INTEGER,INTENT(IN),OPTIONAL :: day
921INTEGER,INTENT(IN),OPTIONAL :: hour
922INTEGER,INTENT(IN),OPTIONAL :: minute
923INTEGER,INTENT(IN),OPTIONAL :: sec
924INTEGER,INTENT(IN),OPTIONAL :: msec
925CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate
926CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate
927CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate
928
929INTEGER :: n, l, lyear, lmonth, d, h, m, s, ms
930CHARACTER(len=23) :: datebuf
931
932this%month = 0
933
934IF (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
956200 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
961ELSE 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
969220 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
Index method.

Generated with Doxygen.