This commit is contained in:
2021-02-05 15:22:28 +00:00
parent 763fec3fdb
commit fc8d4ba436

View File

@@ -447,20 +447,20 @@ namespace AyaNova.DataList
dtAfter = ClientToday.AddDays(-1); dtAfter = ClientToday.AddDays(-1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
dtBefore = ClientToday; dtBefore = ClientToday;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*today*": case "*today*":
//Between yesterday at midnight and tommorow at midnight //Between yesterday at midnight and tommorow at midnight
dtAfter = ClientToday.AddSeconds(-1); dtAfter = ClientToday.AddSeconds(-1);
dtBefore = ClientToday.AddDays(1); dtBefore = ClientToday.AddDays(1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*tomorrow*": case "*tomorrow*":
//Between Tonight at midnight and day after tommorow at midnight //Between Tonight at midnight and day after tommorow at midnight
dtAfter = ClientToday.AddDays(1).AddSeconds(-1); dtAfter = ClientToday.AddDays(1).AddSeconds(-1);
dtBefore = ClientToday.AddDays(2); dtBefore = ClientToday.AddDays(2);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastweek*": case "*lastweek*":
//Between two Sundays ago at midnight and last sunday at midnight //Between two Sundays ago at midnight and last sunday at midnight
@@ -473,7 +473,7 @@ namespace AyaNova.DataList
//go to very start of eighth dayahead //go to very start of eighth dayahead
dtBefore = dtAfter.AddDays(8); dtBefore = dtAfter.AddDays(8);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*thisweek*": case "*thisweek*":
//Between Sunday at midnight and Next sunday at midnight //Between Sunday at midnight and Next sunday at midnight
@@ -498,7 +498,7 @@ namespace AyaNova.DataList
dtBefore = dtBefore.AddDays(1); dtBefore = dtBefore.AddDays(1);
} }
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*nextweek*": case "*nextweek*":
//Between Next Sunday at midnight and Next Next sunday at midnight //Between Next Sunday at midnight and Next Next sunday at midnight
@@ -517,7 +517,7 @@ namespace AyaNova.DataList
dtBefore = dtAfter.AddDays(7); dtBefore = dtAfter.AddDays(7);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastmonth*": case "*lastmonth*":
//start with the first day of this month //start with the first day of this month
@@ -531,7 +531,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*thismonth*": case "*thismonth*":
//start with the first day of this month //start with the first day of this month
@@ -543,7 +543,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*nextmonth*": case "*nextmonth*":
@@ -557,7 +557,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*14daywindow*": case "*14daywindow*":
@@ -571,21 +571,21 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past*": case "*past*":
//Forever up to Now //Forever up to Now
dtAfter = new DateTime(1753, 1, 2);//this was for sql server but even then was probably outdated good enough though for our purposes dtAfter = new DateTime(1753, 1, 2);//this was for sql server but even then was probably outdated good enough though for our purposes
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*future*": case "*future*":
//From Now to forever (999 years from now) //From Now to forever (999 years from now)
dtAfter = ClientNow; dtAfter = ClientNow;
dtBefore = dtAfter.AddYears(999); dtBefore = dtAfter.AddYears(999);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastyear*": case "*lastyear*":
@@ -593,7 +593,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(ClientNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1); dtAfter = new DateTime(ClientNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1);
//To zero hour January 1 this year //To zero hour January 1 this year
dtBefore = new DateTime(ClientNow.Year, 1, 1, 0, 0, 00); dtBefore = new DateTime(ClientNow.Year, 1, 1, 0, 0, 00);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*thisyear*": case "*thisyear*":
@@ -601,7 +601,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(ClientNow.Year, 1, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 1, 1).AddSeconds(-1);
//To zero hour Jan 1 next year //To zero hour Jan 1 next year
dtBefore = new DateTime(ClientNow.AddYears(1).Year, 1, 1); dtBefore = new DateTime(ClientNow.AddYears(1).Year, 1, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*last3months*": case "*last3months*":
@@ -609,7 +609,7 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddMonths(-3).AddSeconds(-1); dtAfter = ClientNow.AddMonths(-3).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*last6months*": case "*last6months*":
@@ -617,7 +617,7 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddMonths(-6).AddSeconds(-1); dtAfter = ClientNow.AddMonths(-6).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*pastyear*": //within the prior 365 days before today case "*pastyear*": //within the prior 365 days before today
@@ -625,7 +625,7 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddDays(-365).AddSeconds(-1); dtAfter = ClientNow.AddDays(-365).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past90days*": case "*past90days*":
@@ -633,21 +633,21 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddDays(-90).AddSeconds(-1); dtAfter = ClientNow.AddDays(-90).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past30days*": case "*past30days*":
//From Now minus 30 days //From Now minus 30 days
dtAfter = ClientNow.AddDays(-30).AddSeconds(-1); dtAfter = ClientNow.AddDays(-30).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past7days*": case "*past7days*":
//From Now minus 7 days //From Now minus 7 days
dtAfter = ClientNow.AddDays(-7).AddSeconds(-1); dtAfter = ClientNow.AddDays(-7).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past24hours*": case "*past24hours*":
@@ -655,7 +655,7 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddHours(-24).AddSeconds(-1); dtAfter = ClientNow.AddHours(-24).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*past6hours*": case "*past6hours*":
@@ -663,7 +663,7 @@ namespace AyaNova.DataList
dtAfter = ClientNow.AddHours(-6).AddSeconds(-1); dtAfter = ClientNow.AddHours(-6).AddSeconds(-1);
//To Now //To Now
dtBefore = ClientNow; dtBefore = ClientNow;
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*january*": case "*january*":
@@ -671,67 +671,67 @@ namespace AyaNova.DataList
dtAfter = new DateTime(ClientNow.Year, 1, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 1, 1).AddSeconds(-1);
//To zero hour feb 1 this year //To zero hour feb 1 this year
dtBefore = new DateTime(ClientNow.Year, 2, 1); dtBefore = new DateTime(ClientNow.Year, 2, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*february*": case "*february*":
dtAfter = new DateTime(ClientNow.Year, 2, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 2, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 3, 1); dtBefore = new DateTime(ClientNow.Year, 3, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*march*": case "*march*":
dtAfter = new DateTime(ClientNow.Year, 3, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 3, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 4, 1); dtBefore = new DateTime(ClientNow.Year, 4, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*april*": case "*april*":
dtAfter = new DateTime(ClientNow.Year, 4, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 4, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 5, 1); dtBefore = new DateTime(ClientNow.Year, 5, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*may*": case "*may*":
dtAfter = new DateTime(ClientNow.Year, 5, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 5, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 6, 1); dtBefore = new DateTime(ClientNow.Year, 6, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*june*": case "*june*":
dtAfter = new DateTime(ClientNow.Year, 6, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 6, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 7, 1); dtBefore = new DateTime(ClientNow.Year, 7, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*july*": case "*july*":
dtAfter = new DateTime(ClientNow.Year, 7, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 7, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 8, 1); dtBefore = new DateTime(ClientNow.Year, 8, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*august*": case "*august*":
dtAfter = new DateTime(ClientNow.Year, 8, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 8, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 9, 1); dtBefore = new DateTime(ClientNow.Year, 9, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*september*": case "*september*":
dtAfter = new DateTime(ClientNow.Year, 9, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 9, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 10, 1); dtBefore = new DateTime(ClientNow.Year, 10, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*october*": case "*october*":
dtAfter = new DateTime(ClientNow.Year, 10, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 10, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 11, 1); dtBefore = new DateTime(ClientNow.Year, 11, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*november*": case "*november*":
dtAfter = new DateTime(ClientNow.Year, 11, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 11, 1).AddSeconds(-1);
dtBefore = new DateTime(ClientNow.Year, 12, 1); dtBefore = new DateTime(ClientNow.Year, 12, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*december*": case "*december*":
@@ -739,7 +739,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(ClientNow.Year, 12, 1).AddSeconds(-1); dtAfter = new DateTime(ClientNow.Year, 12, 1).AddSeconds(-1);
//To zero hour Jan 1 next year //To zero hour Jan 1 next year
dtBefore = new DateTime(ClientNow.AddYears(1).Year, 1, 1); dtBefore = new DateTime(ClientNow.AddYears(1).Year, 1, 1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastyearlastmonth*": case "*lastyearlastmonth*":
//start with the first day of this month //start with the first day of this month
@@ -749,7 +749,7 @@ namespace AyaNova.DataList
//Add one month to dtAfter to get end date //Add one month to dtAfter to get end date
dtBefore = dtAfter.AddMonths(1); dtBefore = dtAfter.AddMonths(1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastyearthismonth*": case "*lastyearthismonth*":
@@ -760,7 +760,7 @@ namespace AyaNova.DataList
//Add one month to dtAfter to get end date //Add one month to dtAfter to get end date
dtBefore = dtAfter.AddMonths(1); dtBefore = dtAfter.AddMonths(1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case "*lastyearnextmonth*": case "*lastyearnextmonth*":
@@ -773,7 +773,7 @@ namespace AyaNova.DataList
//Add one month to dtAfter to get end date //Add one month to dtAfter to get end date
dtBefore = dtAfter.AddMonths(1); dtBefore = dtAfter.AddMonths(1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore); BuildSQLBetweenTwoTokenDerivedDates(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
default: default:
@@ -971,18 +971,19 @@ namespace AyaNova.DataList
} }
//This is only used by the token date query code above and that code does convert to UTC time to match the DB so this function will not need to handle that //This is only used by the token date query code above and that code does NOT convert to UTC time to match the DB so this function will handle that
//The other non tokenized date criteria builders are all working with dates that come from the client in UTC already and they don't use this method //The other non tokenized date criteria builders are all working with dates that come from the client in UTC already and they don't use this method
//so nothing required there //so nothing required there
private static void BuildBetweenTwoDatesFragment(string sColumn, StringBuilder sb, DateTime dtAfter, DateTime dtBefore) private static void BuildSQLBetweenTwoTokenDerivedDates(string sColumn, StringBuilder sb, DateTime dtAfter, DateTime dtBefore)
{ {
sb.Append(">'"); sb.Append(">'");
sb.Append(PostgresDateFormat(dtAfter)); sb.Append(PostgresDateFormat(MaxMilliseconds(dtAfter.ToUniversalTime())));
sb.Append("' AND "); sb.Append("' AND ");
sb.Append(sColumn); sb.Append(sColumn);
sb.Append(" "); sb.Append(" ");
sb.Append("<'"); sb.Append("<'");
sb.Append(PostgresDateFormat(dtBefore)); sb.Append(PostgresDateFormat(ZeroMilliseconds(dtBefore.ToUniversalTime())));
sb.Append("'"); sb.Append("'");
} }
@@ -1004,8 +1005,7 @@ namespace AyaNova.DataList
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private static string PostgresDateFormat(DateTime theDate) private static string PostgresDateFormat(DateTime theDate)
{ {
//TODO: Double check that this returns the date as an actual converted to UTC date and not just the local time in UTC format
//If this was used it should be like this for a UTC date to iso8601 //If this was used it should be like this for a UTC date to iso8601
// ISO8601 with 7 decimal places // ISO8601 with 7 decimal places