diff --git a/src/Umbraco.Core/PropertyEditors/Validators/DateTimeValidator.cs b/src/Umbraco.Core/PropertyEditors/Validators/DateTimeValidator.cs index 530935d276..8a01c8d257 100644 --- a/src/Umbraco.Core/PropertyEditors/Validators/DateTimeValidator.cs +++ b/src/Umbraco.Core/PropertyEditors/Validators/DateTimeValidator.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using System.Globalization; using Umbraco.Extensions; namespace Umbraco.Cms.Core.PropertyEditors.Validators; @@ -16,7 +17,7 @@ public class DateTimeValidator : IValueValidator yield break; } - if (DateTime.TryParse(value.ToString(), out DateTime dt) == false) + if (DateTime.TryParse(value.ToString(), CultureInfo.InvariantCulture, out DateTime dt) == false) { yield return new ValidationResult( string.Format("The string value {0} cannot be parsed into a DateTime", value), diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/Validators/DateTimeValidatorTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/Validators/DateTimeValidatorTests.cs new file mode 100644 index 0000000000..7bdd751d3b --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/Validators/DateTimeValidatorTests.cs @@ -0,0 +1,29 @@ +using System.Globalization; +using NUnit.Framework; +using Umbraco.Cms.Core.PropertyEditors.Validators; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors.Validators; + +[TestFixture] +public class DateTimeValidatorTests +{ + [TestCase("en-US", "yyyy-MM-dd HH:mm:ss", TestName = "US Thread, DateTimeValidator")] + [TestCase("en-US", "dd-MM-yyyy HH:mm:ss", TestName = "US Thread, DateTimeValidator ar-SA format")] + [TestCase("ar-SA", "dd-MM-yyyy HH:mm:ss", TestName = "Arabian Saudi Thread, DateTimeValidator")] + [TestCase("ar-SA", "yyyy-MM-dd HH:mm:ss", TestName = "Arabian Saudi Thread, DateTimeValidator US format")] + public void DateTimeValidatorIsCultureInvariant(string culture, string format) + { + var dateString = DateTime.Now.ToString(format); + + var cultureInfo = new CultureInfo(culture); + Thread.CurrentThread.CurrentCulture = cultureInfo; + Thread.CurrentThread.CurrentUICulture = cultureInfo; + + var validator = new DateTimeValidator(); + var validationResults = validator.Validate(dateString, "DATETIME", new Dictionary + { + ["format"] = format + }); + CollectionAssert.IsEmpty(validationResults); + } +}