subroutine parse_timeunit_i8(tunit, n, t0, dt, rc)
use ESMF
implicit none
character(len=*), intent(in) :: tunit
integer(ESMF_KIND_I8), intent(in) :: n
type(ESMF_Time), intent(out) :: t0
type(ESMF_TimeInterval), intent(out) :: dt
integer, optional, intent(out) :: rc
integer :: status
integer :: i
character(len=ESMF_MAXSTR) :: s1, s2, s_time, s_unit
character(len=1) :: c1
integer :: y,m,d,hour,min,sec
integer(ESMF_KIND_I8) :: isec
type(ESMF_Calendar) :: gregorianCalendar
i=index(trim(tunit), 'since')
s_time=trim(tunit(i+5:))
s_unit=trim(tunit(1:i-1))
read(s_time,*) s1, s2
read(s1, '(i4,a1,i2,a1,i2)') y, c1, m, c1, d
read(s2, '(i2,a1,i2,a1,i2)') hour, c1, min, c1, sec
_ASSERT(trim(s_unit) == 'seconds', "s_unit /= 'seconds' is not handled")
isec=n
gregorianCalendar = ESMF_CalendarCreate(ESMF_CALKIND_GREGORIAN, name='Gregorian_obs', _RC)
call ESMF_timeSet(t0, yy=y,mm=m,dd=m,h=hour,m=min,s=sec,&
calendar=gregorianCalendar, _RC)
call ESMF_timeintervalSet(dt, d=0, h=0, m=0, s_i8=isec, _RC)
_RETURN(_SUCCESS)
end subroutine parse_timeunit_i8