From d5b9afd673c05cc8a6816f81fa432cdd33ba3f5a Mon Sep 17 00:00:00 2001
From: Florian Prill <m300196@mlogin102.hpc.dkrz.de>
Date: Mon, 12 Sep 2016 14:04:32 +0200
Subject: [PATCH] implemented assignment operator for milliseconds.

---
 examples/example_hl.f90 |  4 ++++
 src/libmtime_hl.f90     | 19 ++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/examples/example_hl.f90 b/examples/example_hl.f90
index eb9cc94e..0a6728fe 100644
--- a/examples/example_hl.f90
+++ b/examples/example_hl.f90
@@ -87,6 +87,10 @@ PROGRAM example
   dt3 = "1970-01-01T00:00:01"
   WRITE (0,*) dt%to_string(), " == ", dt3%to_string(), ": ", (dt == dt3)
 
+  ! interval assignment with milliseconds
+  td = 360000
+  WRITE (0,*) "interval assignment with milliseconds: ", td%to_string()
+
   ! ------------------------------------------------------------
   ! EXAMPLE FOR ERROR HANDLING
   ! ------------------------------------------------------------
diff --git a/src/libmtime_hl.f90 b/src/libmtime_hl.f90
index 19a480e8..5356ac80 100644
--- a/src/libmtime_hl.f90
+++ b/src/libmtime_hl.f90
@@ -18,6 +18,8 @@ module mtime_hl
 
   public :: t_datetime, t_timedelta
 
+  INTEGER, PARAMETER :: i8 = SELECTED_INT_KIND(14)   !< at least 8 byte integer
+
   !> Wrapper class for "mtime" data type "datetime".
   !
   !  Avoids, e.g.,  explicit use of POINTERs by the user.
@@ -68,8 +70,9 @@ module mtime_hl
 
     procedure :: to_string        => t_timedelta_to_string
     procedure :: assign_string    => t_timedelta_assign_string
+    procedure :: assign_ms        => t_timedelta_assign_ms
 
-    generic   :: assignment(=)   => assign_string
+    GENERIC   :: ASSIGNMENT(=)   => assign_string, assign_ms
 
   end type t_timedelta
 
@@ -183,6 +186,20 @@ contains
     call deallocateTimedelta(td_tmp)
   end subroutine t_timedelta_assign_string
 
+  ! Assignment operator: this = milliseconds.
+  !
+  SUBROUTINE t_timedelta_assign_ms(this, td_ms)
+    CLASS (t_timedelta), INTENT(out) :: this
+    INTEGER,             INTENT(in)  :: td_ms
+    TYPE(timedelta), POINTER :: td_tmp
+    CHARACTER(len=max_timedelta_str_len) :: td_string
+    CALL getPTStringFromMS(INT(td_ms,i8), td_string)
+    td_tmp => newTimedelta(td_string)
+    this%td = td_tmp
+    this%td%sign = td_tmp%sign
+    call deallocateTimedelta(td_tmp)
+  END SUBROUTINE t_timedelta_assign_ms
+
 end module mtime_hl
 !>
 !! @}
-- 
GitLab