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;