diff --git a/Duplicati/Library/Utility/Utility.cs b/Duplicati/Library/Utility/Utility.cs
index 50ca7e954..faf312d25 100644
--- a/Duplicati/Library/Utility/Utility.cs
+++ b/Duplicati/Library/Utility/Utility.cs
@@ -1189,6 +1189,30 @@ namespace Duplicati.Library.Utility
return Convert.FromBase64String(Base64UrlToBase64Plain(data));
}
+ ///
+ /// Converts a DateTime instance to a Unix timestamp
+ ///
+ /// The Unix timestamp.
+ /// The DateTime instance to convert.
+ public static long ToUnixTimestamp(DateTime input)
+ {
+ var ticks = input.ToUniversalTime().Ticks;
+ ticks -= ticks % TimeSpan.TicksPerSecond;
+ input = new DateTime(ticks, DateTimeKind.Utc);
+
+ return (long)Math.Floor((input - EPOCH).TotalSeconds);
+ }
+
+ ///
+ /// Converts a Unix timestamp to a DateTime instance
+ ///
+ /// The DateTime instance represented by the timestamp.
+ /// The Unix timestamp to use.
+ public static DateTime ToUnixTimestamp(long input)
+ {
+ return EPOCH.AddSeconds(input);
+ }
+
///
/// Returns a value indicating if the given type should be treated as a primitive
///
@@ -1216,7 +1240,12 @@ namespace Duplicati.Library.Utility
if (IsPrimitiveTypeForSerialization(item.GetType()))
{
if (item is DateTime)
+ {
writer.Write(((DateTime)item).ToLocalTime());
+ writer.Write(" (");
+ writer.Write(ToUnixTimestamp((DateTime)item));
+ writer.Write(")");
+ }
else
writer.Write(item);
return true;