libsim Versione 7.2.6

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

877
878#include "arrayof_post.F90"
879
880
881! ===============
882! == timedelta ==
883! ===============
884!> Costruisce un oggetto \a timedelta con i parametri opzionali forniti.
885!! Se non viene passato nulla lo inizializza a intervallo di durata nulla.
886!! L'intervallo ottenuto � pari alla somma dei valori di tutti i parametri
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.
890FUNCTION timedelta_new(year, month, day, hour, minute, sec, msec, &
891 isodate, simpledate, oraclesimdate) RESULT (this)
892INTEGER,INTENT(IN),OPTIONAL :: year !< anni, se presente l'oggetto diventa "popolare"
893INTEGER,INTENT(IN),OPTIONAL :: month !< mesi, se presente l'oggetto diventa "popolare"
894INTEGER,INTENT(IN),OPTIONAL :: day !< giorni
895INTEGER,INTENT(IN),OPTIONAL :: hour !< ore
896INTEGER,INTENT(IN),OPTIONAL :: minute !< minuti
897INTEGER,INTENT(IN),OPTIONAL :: sec !< secondi
898INTEGER,INTENT(IN),OPTIONAL :: msec !< millisecondi
899CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate !< inizializza l'oggetto ad un intervallo nel formato \c GGGGGGGGGG \c hh:mm:ss.msc, ignorando tutti gli altri parametri
900CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate !< inizializza l'oggetto ad un intervallo nel formato \c GGGGGGGGhhmmmsc, ignorando tutti gli altri parametri, da preferire rispetto a \a oraclesimdate
901CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate !< inizializza l'oggetto ad un intervallo nel formato \c GGGGGGGGhhmm, ignorando tutti gli altri parametri
902
903TYPE(timedelta) :: this !< oggetto da inizializzare
904
905CALL timedelta_init(this, year, month, day, hour, minute, sec, msec, &
906 isodate, simpledate, oraclesimdate)
907
908END FUNCTION timedelta_new
909
910
911!> Costruisce un oggetto \a timedelta con i parametri opzionali forniti.
912!! Se non viene passato nulla lo inizializza a intervallo di durata nulla.
913!! L'intervallo ottenuto � pari alla somma dei valori di tutti i parametri
914!! forniti, ovviamente non fornire un parametro equivale a fornirlo =0.
915SUBROUTINE timedelta_init(this, year, month, day, hour, minute, sec, msec, &
916 isodate, simpledate, oraclesimdate)
917TYPE(timedelta),INTENT(INOUT) :: this !< oggetto da inizializzare
918INTEGER,INTENT(IN),OPTIONAL :: year !< anni, se presente l'oggetto diventa "popolare"
919INTEGER,INTENT(IN),OPTIONAL :: month !< mesi, se presente l'oggetto diventa "popolare"
920INTEGER,INTENT(IN),OPTIONAL :: day !< giorni
921INTEGER,INTENT(IN),OPTIONAL :: hour !< ore
922INTEGER,INTENT(IN),OPTIONAL :: minute !< minuti
923INTEGER,INTENT(IN),OPTIONAL :: sec !< secondi
924INTEGER,INTENT(IN),OPTIONAL :: msec !< millisecondi
925CHARACTER(len=*),INTENT(IN),OPTIONAL :: isodate !< inizializza l'oggetto ad un intervallo nel formato \c AAAAMMGGGG \c hh:mm:ss.msc, ignorando tutti gli altri parametri, se \c AAAA o \c MM sono diversi da 0 l'oggetto diventa "popolare"
926CHARACTER(len=*),INTENT(IN),OPTIONAL :: simpledate !< inizializza l'oggetto ad un intervallo nel formato \c GGGGGGGGhhmmmsc, ignorando tutti gli altri parametri, da preferire rispetto a \a oraclesimdate
927CHARACTER(len=12),INTENT(IN),OPTIONAL :: oraclesimdate !< inizializza l'oggetto ad un intervallo nel formato \c GGGGGGGGhhmm, ignorando tutti gli altri parametri
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.