[UP]


Manual Reference Pages  - M_time_oop (3)

NAME

M_time_oop(3fm) - [M_time::OBJECT_ORIENTED] OOP interface for M_time(3fm) (LICENSE:PD)

CONTENTS

Synopsis
Description
Example

SYNOPSIS

use M_time_oop, only : date_time

   use M_time_oop,only : operator(+),operator(-),operator(>),operator(<)
   use M_time_oop,only : operator(<=),operator(>=),operator(==),operator(/=)

TYPE(date_time) :: mydate

mydate%year mydate%month mydate%day mydate%tz mydate%hour mydate%minute mydate%second mydate%millisecond

call mydate%init()

mydate%format(’’) mydate%ordinal() mydate%weekday() mydate%epoch() mydate%julian() dat=mydate%datout() mydate%delta(year=NN, month=NN, day=NN, tz=NN, hour=NN, minute=NN, second=NN, millisecond=NN, week=NN, duration=’DD-HH:MM:SS.XX’)

DESCRIPTION

An object-oriented interface to the M_time module. The following example program demonstrates and documents the interface

EXAMPLE

sample program

    program demo_M_time_oop
    !
    ! This is an example using the object-oriented class/type model
    ! This is essentially the same functionality as the procedures
    ! in the procedural module M_time(3fm), but allows for Object Oriented syntax:
    !
    use M_time_oop,only : date_time
    !!use M_time_oop,only : operator(+),operator(-),operator(>),operator(<)
    !!use M_time_oop,only : operator(<=),operator(>=),operator(==),operator(/=)
    implicit none
    integer         :: dat(8)
    TYPE(date_time) :: event
    TYPE(date_time) :: otherdate
    TYPE(date_time) :: answer

character(len=*),parameter :: iso_fmt=’%Y-%M-%DT%h:%m:%s.%x%z’ ! DIFFERENT INITIALIZATION STYLES ! (Still debating on how best to do this) write(*,*) write(*,’(a)’)’Various initialization styes’

! DEFINE type(date_time) WITH CONSTRUCTOR otherdate=date_time() print *,’DEFAULT CONSTRUCTOR %format() ’,& & otherdate%format() print *,’DEFAULT CONSTRUCTOR %format("") ’,& & otherdate%format("") print *,’DEFAULT CONSTRUCTOR %format(user-specified) ’,& & otherdate%format(iso_fmt) print *,’DEFAULT CONSTRUCTOR %format("USA") ’,& & otherdate%format("USA")

otherdate=date_time(1492,10,12,0,0,0,0,0) print *,’DEFAULT CONSTRUCTOR setting values ’,& & otherdate%format()

otherdate=date_time(2016,6,11) print *,’DEFAULT CONSTRUCTOR with partial values ’,& & otherdate%format()

otherdate=date_time(year=2016,month=6,day=11,tz=-240,& & hour=21,minute=09,second=11,millisecond=500) print *,’DEFAULT CONSTRUCTOR with values by name ’,& & otherdate%format()

otherdate=date_time([1776,7,4,0,0,0,0,0]) print *,’CONSTRUCTOR with a dat array ’,& & otherdate%format()

otherdate=date_time([1776,7,4]) print *,’CONSTRUCTOR with a partial dat array ’,& & otherdate%format()

! the init() method supports several methods ! initialize to current time using INIT call otherdate%init() ! initialize to current time using INIT call otherdate%init(type="now")

! initialize to beginning of Unix Epoch Time call otherdate%init(type="epoch") ! Note ! currently, DATE_TIME DATE array is set to Unix Epoch ! start USING LOCAL TIMEZONE ! whereas default constructor is using default of Unix Epoch ! start using Z time (GMT or UTC time)

! initialize with a DAT array using INIT, ! compatible with DATE_AND_TIME VALUES(8) call otherdate%init(dat=[1970,1,1,0,0,0,0,0]) ! using INIT with ordered values call otherdate%init(2016,6,11,-300,23,1,0,0) ! using INIT with names call otherdate%init(year=2016,month=6,day=11,& & tz=-300,hour=23,minute=1,second=0,millisecond=0) ! ! take current date and exercise the OOP interface ! initialize to current time using INIT call event%init() write(*,*) write(*,*)’Print members of type(DATE_TIME)’ ! show derived type write(*,404)’EVENT=’,event 404 format(1x,a,i0,*(",",i0:))

! MEMBERS ( basic time values are all integers) ! print members of type write(*,101)’%year Year................... ’,event%year write(*,101)’%month Month.................. ’,event%month write(*,101)’%day Day.................... ’,event%day write(*,101)’%tz Timezone............... ’,event%tz write(*,101)’%hour Hour................... ’,event%hour write(*,101)’%minute Minute................. ’,event%minute write(*,101)’%second Second................. ’,event%second write(*,101)’%millisecond Millisecond............ ’,event%millisecond

! PRINT METHODS OF TYPE write(*,*)’Print methods of type(DATE_TIME)’ write(*,101)’%ordinal Ordinal day of year.... ’, event%ordinal() write(*,101)’%weekday Weekday................ ’, event%weekday() 101 format(1x,a,i0) ! DOUBLE PRECISION VALUES EASILY MANIPULATED MATHEMATICALLY write(*,202)’%epoch Unix epoch time........ ’, event%epoch() write(*,202)’%julian Julian date............ ’, event%julian() 202 format(1x,a,g0)

! FORMATTED STRINGS (many strings possible. ! Takes the same format string as fmtdate(3f)) write(*,*) write(*,*)’Formatted Strings (%format("STRING") & & -- see fmtdate(3f) for format descriptions’ ! abbreviated month name %l Dec write(*,303)’Short month............ ’,& & event%format("%l") ! ! full month name %L December write(*,303)’Month.................. ’,& & event%format("%L") ! ! first three characters of weekday %w Sat write(*,303)’Short week............. ’,& & event%format("%w") ! ! weekday name %W Saturday write(*,303)’Week .................. ’,& & event%format("%W") ! ! with no percent (%) characters write(*,303)’Calendar Time ......... ’,& & event%format("Y-M-D h:m:s.x z") ! ! keywords with no percent (%) characters write(*,303)’Calendar Time ......... ’,& & event%format(’"year-month-day & ! &hour:minute:second.millisecond timezone"’) write(*,*)event%format(’Longer format.......... & &"%W, %L %d, %Y %H:%m:%s %N"’) ! a nice friendly format ! 303 format(1x,a,’"’,a,’"’)

! convert date_time to integer array ! (maybe to use with module M_TIME base procedures) dat=event%datout() write(*,*) write(*,404)’DAT=’,dat

! OVERLOADED OPERATORS (add and subtract) ! a date_time object can have seconds added answer=event+1*86400.0d0 ! ! a nice friendly format write(*,*)answer%format(’TOMORROW="%W, %L %d, %Y %H:%m:%s %N"’) ! ! a date_time object can have seconds subtracted answer=event-1*86400.0d0 ! a nice friendly format write(*,*)answer%format(’YESTERDAY="%W, %L %d, %Y %H:%m:%s %N"’) ! ! if both operands are DATE_TIME objects a subtraction ! finds the time in seconds between the two dates write(*,*)’DIFFERENCE (subtracting one date_time from another)=’,& & answer-event

! OVERLOADED OPERATORS (logical comparisons) ! NOTE COMPARISONS ARE PERFORMED BY ! CONVERTING TIMES TO INTEGER SECONDS write(*,*)’> ’,event.eq.event ,event.lt.event ,event.gt.event & & ,event.le.event ,event.ge.event ,event.ne.event ! write(*,*)’> ’,event.eq.answer ,event.lt.answer ,event.gt.answer & & ,event.le.answer ,event.ge.answer ,event.ne.answer ! write(*,*)’> ’,answer.eq.event ,answer.lt.event ,answer.gt.event & & ,answer.le.event ,answer.ge.event ,answer.ne.event

! %DELTA easily lets you change dates by common increments write(*,*) write(*,404)’%DELTA tests starting with date ’,event%delta() ! write(*,*) event%format(" & &%W, %L %d, %Y %H:%m:%s %N")

write(*,*)’Remember years and months are not constant units’

answer=event%delta(year=1) write(*,*)answer%format(& & "FOR %%DELTA(YEAR=+1) %W, %L %d, %Y %H:%m:%s %N") answer=event%delta(year=-1) write(*,*)answer%format(& & "FOR %%DELTA(YEAR=-1) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(month=24) write(*,*)answer%format(& & "FOR %%DELTA(MONTH=+24) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(month=-24) write(*,*)answer%format(& & "FOR %%DELTA(MONTH=-24) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(week=1) write(*,*)answer%format(& & "FOR %%DELTA(WEEK=+1) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(week=-1) write(*,*)answer%format(& & "FOR %%DELTA(WEEK=-1) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(day=1) write(*,*)answer%format(& & "FOR %%DELTA(DAY=+1) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(day=-1) write(*,*)answer%format(& & "FOR %%DELTA(DAY=-1) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(hour=4) write(*,*)answer%format(& ! & "FOR %%DELTA(HOUR=+4) %W, %L %d, %Y %H:%m:%s %N") answer=event%delta(hour=-4) write(*,*)answer%format(& & "FOR %%DELTA(HOUR=-4) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(minute=180) write(*,*)answer%format(& & "FOR %%DELTA(MINUTE=+180) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(minute=-180) write(*,*)answer%format(& & "FOR %%DELTA(MINUTE=-180) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(second=1800) write(*,*)answer%format(& & "FOR %%DELTA(SECOND=+1800) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(second=-1800) write(*,*)answer%format(& & "FOR %%DELTA(SECOND=-1800) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(millisecond=10000) write(*,*)answer%format(& & "FOR %%DELTA(MILLISECOND=+10000) %W, %L %d, %Y %H:%m:%s %N") ! answer=event%delta(millisecond=-10000) write(*,*)answer%format(& & "FOR %%DELTA(MILLISECOND=-10000) %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(year=3,month=2,day=100,hour=200,& & week=-1,minute=300,second=1000,millisecond=-10000) write(*,*)answer%format(& ! &"FOR %%DELTA(year=3,month=2,day=100,hour=200,& &week=-1,minute=300,second=1000,millisecond=100000)& & %W, %L %d, %Y %H:%m:%s %N")

answer=event%delta(duration="1-20:30:40.50") write(*,*)answer%format(& & "FOR %%DELTA(DURATION=’1-20:30:40.50’)& & %W, %L %d, %Y %H:%m:%s %N")

end program demo_M_time_oop

Sample output:

 Various initialization styes
  DEFAULT CONSTRUCTOR %format()               1970-01-01T00:00:00.000+00:00
  DEFAULT CONSTRUCTOR %format("")             1970-01-01T00:00:00.000+00:00
  DEFAULT CONSTRUCTOR %format(user-specified) 1970-01-01T00:00:00.000+00:00
  DEFAULT CONSTRUCTOR %format("USA")          Thursday, January 1st, 1970 12:00:00 AM
  DEFAULT CONSTRUCTOR setting values          1492-10-12T00:00:00.000+00:00
  DEFAULT CONSTRUCTOR with partial values     2016-06-11T00:00:00.000+00:00
  DEFAULT CONSTRUCTOR with values by name     2016-06-11T21:09:11.500-04:00
  CONSTRUCTOR with a dat array                1776-07-04T00:00:00.000+00:00
  CONSTRUCTOR with a partial dat array        1776-07-04T20:00:00.000-04:00

Print members of type(DATE_TIME) EVENT=2020,10,24,-240,21,49,54,105 %year Year................... 2020 %month Month.................. 10 %day Day.................... 24 %tz Timezone............... -240 %hour Hour................... 21 %minute Minute................. 49 %second Second................. 54 %millisecond Millisecond............ 105 Print methods of type(DATE_TIME) %ordinal Ordinal day of year.... 298 %weekday Weekday................ 6 %epoch Unix epoch time........ 1603590594.1049695 %julian Julian date............ 2459147.5763206594

Formatted Strings (%format("STRING") -- see fmtdate(3f) for format descriptions Short month............ "Oct" Month.................. "October" Short week............. "Sat" Week .................. "Saturday" Calendar Time ......... "2020-10-24 21:49:54.105 -04:00" Calendar Time ......... ""2020-10-24 21:49:54.105 -0400"" Longer format.......... "Saturday, October 24th, 2020 9:49:54 PM"

DAT=2020,10,24,-240,21,49,54,105 TOMORROW="Sunday, October 25th, 2020 9:49:54 PM" YESTERDAY="Friday, October 23rd, 2020 9:49:54 PM" DIFFERENCE (subtracting one date_time from another)= -86400.000000000000 > T F F T T F > F F T F T T > F T F T F T

%DELTA tests starting with date 2020,10,24,-240,21,49,54,105 Saturday, October 24th, 2020 9:49:54 PM Remember years and months are not constant units FOR %DELTA(YEAR=+1) Sunday, October 24th, 2021 9:49:54 PM FOR %DELTA(YEAR=-1) Thursday, October 24th, 2019 9:49:54 PM FOR %DELTA(MONTH=+24) Wednesday, October 26th, 2022 9:49:54 PM FOR %DELTA(MONTH=-24) Wednesday, October 24th, 2018 9:49:54 PM FOR %DELTA(WEEK=+1) Saturday, October 31st, 2020 9:49:54 PM FOR %DELTA(WEEK=-1) Saturday, October 17th, 2020 9:49:54 PM FOR %DELTA(DAY=+1) Sunday, October 25th, 2020 9:49:54 PM FOR %DELTA(DAY=-1) Friday, October 23rd, 2020 9:49:54 PM FOR %DELTA(HOUR=+4) Sunday, October 25th, 2020 1:49:54 AM FOR %DELTA(HOUR=-4) Saturday, October 24th, 2020 5:49:54 PM FOR %DELTA(MINUTE=+180) Sunday, October 25th, 2020 12:49:54 AM FOR %DELTA(MINUTE=-180) Saturday, October 24th, 2020 6:49:54 PM FOR %DELTA(SECOND=+1800) Saturday, October 24th, 2020 10:19:54 PM FOR %DELTA(SECOND=-1800) Saturday, October 24th, 2020 9:19:54 PM FOR %DELTA(MILLISECOND=+10000) Saturday, October 24th, 2020 9:50:04 PM FOR %DELTA(MILLISECOND=-10000) Saturday, October 24th, 2020 9:49:44 PM FOR %DELTA(year=3,month=2,day=100,hour=200,week=-1,minute=300, second=1000,millisecond=100000) Thursday, April 4th, 2024 11:06:24 AM FOR %DELTA(DURATION=’1-20:30:40.50’) Monday, October 26th, 2020 6:20:34 PM


M_time_oop (3) March 11, 2021
Generated by manServer 1.08 from 7da0a65b-c5ba-403f-a9b0-24115806e851 using man macros.