diff --git a/src/main/java/no/nibio/vips/util/DateUtil.java b/src/main/java/no/nibio/vips/util/DateUtil.java
index 68479be7a2382708ef6ae84318399f4cd951cc46..c3d0a081d59bc22d34ce1717aadb788a9b9ff8dc 100644
--- a/src/main/java/no/nibio/vips/util/DateUtil.java
+++ b/src/main/java/no/nibio/vips/util/DateUtil.java
@@ -23,7 +23,7 @@ import java.util.Calendar;
 import java.util.Date;
 
 /**
- * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a>
+ * @copyright 2018 <a href="http://www.nibio.no/">NIBIO</a>
  * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
  */
 public class DateUtil {
@@ -59,4 +59,40 @@ public class DateUtil {
         retVal += toDOY;
         return retVal;
     }
+    
+    public Date getClosestFutureWholeHour(Date timeStamp)
+    {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(timeStamp);
+        
+        // If we're already at whole hour, change nothing
+        if(cal.get(Calendar.MINUTE) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MILLISECOND) == 0)
+        {
+            return timeStamp;
+        }
+        
+        cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + 1);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal.getTime();
+    }
+    
+    public Date getClosestPastWholeHour(Date timeStamp)
+    {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(timeStamp);
+        
+        // If we're already at whole hour, change nothing
+        if(cal.get(Calendar.MINUTE) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MILLISECOND) == 0)
+        {
+            return timeStamp;
+        }
+        
+        cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) - 1);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal.getTime();
+    }
 }