From 5bcba6591c38fbb9f7a3a5f63c86963d8a066595 Mon Sep 17 00:00:00 2001
From: Florian Prill <florian.prill@dwd.de>
Date: Fri, 2 Feb 2018 14:34:06 +0100
Subject: [PATCH] fixed missing initialization; added test to example.

---
 examples/example.f90  | 32 ++++++++++++++++++++++++++++++++
 src/mtime_timedelta.c |  2 ++
 2 files changed, 34 insertions(+)

diff --git a/examples/example.f90 b/examples/example.f90
index 548d997a..159dfbb8 100644
--- a/examples/example.f90
+++ b/examples/example.f90
@@ -21,6 +21,7 @@ program example
   type(datetime), pointer :: start_date_tmp
   type(datetime), pointer :: start_date_test
   type(datetime), pointer :: stop_date
+  type(datetime), pointer :: end_date
 
   type(timedelta), pointer :: time_step
 
@@ -119,6 +120,8 @@ contains
     type(datetime), pointer               :: dt1 => null(), dt2 => null()    
     character(len=MAX_TIMEDELTA_STR_LEN)  :: td_string
     character(len=MAX_DATETIME_STR_LEN)   :: dstring
+    TYPE(timedelta), POINTER              :: time_delta
+    CHARACTER(LEN=MAX_DATETIME_STR_LEN)   ::  dt_string
     
     mtime_td => newTimedelta("PT1H1M1S")
     mtime_td = mtime_td * 0.3d0
@@ -230,6 +233,35 @@ contains
     call deallocateDatetime(dt2)    
     call deallocateTimedelta(mtime_td)
 
+    CALL setCalendar(PROLEPTIC_GREGORIAN)
+    start_date => newDatetime("2017-07-01T00:00:00.000")
+    end_date   => newDatetime("2017-07-31T00:00:00.000")
+    time_delta => newTimeDelta("P01D")
+    time_delta = end_date - start_date
+    CALL datetimeToString(start_date, dt_string)
+    WRITE (0,*) "start_date = ", TRIM(dt_string)
+    CALL datetimeToString(end_date, dt_string)
+    WRITE (0,*) "end_date   = ", TRIM(dt_string)
+    CALL timedeltaToString(time_delta, td_string)
+    WRITE (0,*) "difference (P30D) = ", TRIM(td_string)
+    CALL deallocateDatetime(start_date)
+    CALL deallocateDatetime(end_date)
+    CALL deallocateTimedelta(time_delta)
+
+    start_date => newDatetime("2017-07-01T00:00:00.000")
+    end_date   => newDatetime("2017-08-01T00:00:00.000")
+    time_delta => newTimeDelta("P01D")
+    time_delta = end_date - start_date
+    CALL datetimeToString(start_date, dt_string)
+    WRITE (0,*) "start_date = ", TRIM(dt_string)
+    CALL datetimeToString(end_date, dt_string)
+    WRITE (0,*) "end_date   = ", TRIM(dt_string)
+    CALL timedeltaToString(time_delta, td_string)
+    WRITE (0,*) "difference (P01M) = ", TRIM(td_string)
+    CALL deallocateDatetime(start_date)
+    CALL deallocateDatetime(end_date)
+    CALL deallocateTimedelta(time_delta)
+
   end subroutine icon_tests
 
   subroutine event_tests
diff --git a/src/mtime_timedelta.c b/src/mtime_timedelta.c
index 7a6836b4..d1f18630 100644
--- a/src/mtime_timedelta.c
+++ b/src/mtime_timedelta.c
@@ -1082,6 +1082,8 @@ julianDeltaToTimeDelta(struct _juliandelta* jd, struct _datetime* base_dt, struc
           /*       } */
           /*   } */
 
+          td_return->month = 0;
+          td_return->day = (int) delta_final_year;
           for (i = NO_OF_MONTHS_IN_A_YEAR; i > 0; i--)
             {
               if (delta_final_year >= msdinm[base_dt->date.month - 1][i])
-- 
GitLab