Skip to content

Commit

Permalink
#157 Get-IshBaselineItem parses incoming ModifiedOn and CreatedOn val…
Browse files Browse the repository at this point in the history
…ues using CurrentCulture instead resulting in Month Day swapping for some Regional Settings ... Again Regional Options issues on the build server plus actual fix for BaselineItem datetimes parsing
  • Loading branch information
ddemeyer committed Jan 26, 2024
1 parent 4f07a0a commit f5e9d3e
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,11 @@ Describe "Get-IshBaselineItem" -Tags "Read" {
$day = (Get-Date).Day
$month = (Get-Date).Month
$bi = (Get-IshBaselineItem -IshObject $ishObject)
# Neutral parsing could lead to DateTime.Min ...
# Can happen with ([System.Globalization.CultureInfo]::CurrentCulture).DateTimeFormat.ShortDatePattern = "MM/dd/yyyy"
$bi[0].ModifiedOn | Should -Not -Be "0001-01-01T00:00:00"
$bi[0].ModifiedOnAsSortableDateTime | Should -Not -Be "0001-01-01T00:00:00.0000000"
# Where ModifiedOn is Sunday, August 6, 2023 5:23:45 PM
$bi[0].ModifiedOn | Should -Be $bi[0].ModifiedOnAsSortableDateTime #DEBUG!!!
(Get-Date -Date $bi[0].ModifiedOn).Day | Should -Be $day
(Get-Date -Date $bi[0].ModifiedOn).Month | Should -Be $month
# Where ModifiedOnAsSortableDateTime is 2023-08-06T17:23:45 which is in the future at the time of writing
Expand Down
51 changes: 37 additions & 14 deletions Source/ISHRemote/Trisoft.ISHRemote/HelperClasses/NameHelper.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* Copyright (c) 2014 All Rights Reserved by the SDL Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -101,19 +101,7 @@ public PSNoteProperty GetPSNoteProperty(Enumerations.ISHType[] ishTypes, IshMeta
case Enumerations.DataType.DateTime:
//var formatStrings = new string[] { "dd/MM/yyyy HH:mm:ss", "yyyy-MM-dd hh:mm:ss", "dd/MM/yyy" };
DateTime dateTime;
if (DateTime.TryParseExact(ishField.Value, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
propertyValue = dateTime.ToString("s");
}
else if (DateTime.TryParseExact(ishField.Value, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
propertyValue = dateTime.ToString("s");
}
else if (DateTime.TryParseExact(ishField.Value, "yyyy - MM - ddTHH:mm: ss", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
propertyValue = dateTime.ToString("s");
}
else if (DateTime.TryParse(ishField.Value, out dateTime))
if (TryParseDateTimeExact(ishField.Value, out dateTime))
{
propertyValue = dateTime.ToString("s");
}
Expand All @@ -134,6 +122,41 @@ public PSNoteProperty GetPSNoteProperty(Enumerations.ISHType[] ishTypes, IshMeta
return new PSNoteProperty("zzzNameHelperError", $"ISHType[{ishTypes}] Level[{ishField.Level.ToString()}] Name[{ishField.Name}] is unknown");
}

/// <summary>
/// Single sourcing the fallback mechanism of historical API date formats used on the various CMS APIs
/// This function should be used to avoid generic DateTime parsing based on environemnt variables that are different from classic dd/MM/yyyy.
/// ([System.Globalization.CultureInfo]::CurrentCulture).DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"
/// </summary>
/// <param name="someDateTimeValue">Incoming API potential DateTime string</param>
/// <param name="outDateTime">DateTime object holding a succesful parse.</param>
/// <returns></returns>
public static bool TryParseDateTimeExact(string someDateTimeValue, out DateTime outDateTime)
{
DateTime dateTime;
if (DateTime.TryParseExact(someDateTimeValue, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
outDateTime = dateTime;
return true;
}
else if (DateTime.TryParseExact(someDateTimeValue, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
outDateTime = dateTime;
return true;
}
else if (DateTime.TryParseExact(someDateTimeValue, "yyyy - MM - ddTHH:mm: ss", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
outDateTime = dateTime;
return true;
}
else if (DateTime.TryParse(someDateTimeValue, out dateTime))
{
outDateTime = dateTime;
return true;
}
outDateTime = DateTime.MinValue;
return false;
}

// Potentially make FileNameHelper static methods public here...
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* Copyright (c) 2014 All Rights Reserved by the SDL Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -76,9 +76,9 @@ public IshBaselineItem(string baselineId, XmlElement xmlIshBaselineItem)
Author = xmlIshBaselineItem.Attributes["author"].Value;
Source = Enumerations.ToBaselineSourceEnumeration(xmlIshBaselineItem.Attributes["source"].Value);
DateTime createdOn;
CreatedOn = DateTime.TryParse(xmlIshBaselineItem.Attributes["created"].Value, out createdOn) ? createdOn : DateTime.MinValue;
CreatedOn = NameHelper.TryParseDateTimeExact(xmlIshBaselineItem.Attributes["created"].Value, out createdOn) ? createdOn : DateTime.MinValue;
DateTime modifiedOn;
ModifiedOn = DateTime.TryParse(xmlIshBaselineItem.Attributes["modified"].Value, out modifiedOn) ? modifiedOn : DateTime.MinValue;
ModifiedOn = = NameHelper.TryParseDateTimeExact(xmlIshBaselineItem.Attributes["modified"].Value, out modifiedOn) ? modifiedOn : DateTime.MinValue;

Check failure on line 81 in Source/ISHRemote/Trisoft.ISHRemote/Objects/Public/IshBaselineItem.cs

View workflow job for this annotation

GitHub Actions / build

Invalid expression term '='

Check failure on line 81 in Source/ISHRemote/Trisoft.ISHRemote/Objects/Public/IshBaselineItem.cs

View workflow job for this annotation

GitHub Actions / build

Invalid expression term '='

Check failure on line 81 in Source/ISHRemote/Trisoft.ISHRemote/Objects/Public/IshBaselineItem.cs

View workflow job for this annotation

GitHub Actions / build

Invalid expression term '='

Check failure on line 81 in Source/ISHRemote/Trisoft.ISHRemote/Objects/Public/IshBaselineItem.cs

View workflow job for this annotation

GitHub Actions / build

Invalid expression term '='
}

/// <summary>
Expand Down

0 comments on commit f5e9d3e

Please sign in to comment.