Skip to content

Commit 71fc9e4

Browse files
committed
Add UTC DateTime Token Transformer
1 parent 8f30147 commit 71fc9e4

6 files changed

Lines changed: 64 additions & 9 deletions

File tree

Tokenizer.Tests/Transformers/ToDateTimeTransformerTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ public void SetUp()
1717
[Test]
1818
public void TestParseDate()
1919
{
20-
var result = @operator.Transform("2014-01-01", "yyyy-MM-dd");
20+
var result = (DateTime) @operator.Transform("2014-01-01", "yyyy-MM-dd");
2121

2222
Assert.AreEqual(new DateTime(2014, 1, 1), result);
23+
Assert.AreEqual(DateTimeKind.Unspecified, result.Kind);
2324
}
2425

2526
[Test]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using NUnit.Framework;
3+
4+
namespace Tokens.Transformers
5+
{
6+
[TestFixture]
7+
public class ToDateTimeUtcTransformerTest
8+
{
9+
private ToDateTimeUtcTransformer @operator;
10+
11+
[SetUp]
12+
public void SetUp()
13+
{
14+
@operator = new ToDateTimeUtcTransformer();
15+
}
16+
17+
[Test]
18+
public void TestParseDateSetsKindToUtc()
19+
{
20+
var result = (DateTime) @operator.Transform("2014-01-01", "yyyy-MM-dd");
21+
22+
Assert.AreEqual(new DateTime(2014, 1, 1), result);
23+
Assert.AreEqual(DateTimeKind.Utc, result.Kind);
24+
}
25+
}
26+
}

Tokenizer/Parsers/TokenParser.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public TokenParser(TokenizerOptions options)
3232

3333
// Add default transformers/validators
3434
RegisterTransformer<ToDateTimeTransformer>();
35+
RegisterTransformer<ToDateTimeUtcTransformer>();
3536
RegisterTransformer<ToLowerTransformer>();
3637
RegisterTransformer<ToUpperTransformer>();
3738
RegisterTransformer<TrimTransformer>();

Tokenizer/Tokenizer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
5-
<Version>2.0.5.0</Version>
5+
<Version>2.0.6.0</Version>
66
<Authors>Chris Wood</Authors>
77
<Company>flipbit.co.uk</Company>
88
<PackageProjectUrl>http://github.com/flipbit/tokenizer</PackageProjectUrl>

Tokenizer/Transformers/ToDateTimeTransformer.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,33 @@ public object Transform(object value, params string[] args)
1212
{
1313
if (value == null) return string.Empty;
1414

15-
DateTime result;
15+
return ToDateTime(value, args, out var result) ? result : value;
16+
}
1617

17-
if (args.Length == 0 || string.IsNullOrEmpty(args[0]))
18+
public static bool ToDateTime(object value, string[] formats, out DateTime result)
19+
{
20+
if (formats == null || formats.Length == 0 || string.IsNullOrEmpty(formats[0]))
1821
{
1922
if (DateTime.TryParse(value.ToString(), out result))
2023
{
21-
return result;
24+
return true;
2225
}
2326
}
2427
else
2528
{
2629

27-
foreach (var arg in args)
30+
foreach (var format in formats)
2831
{
29-
if (DateTime.TryParseExact(value.ToString(), arg, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
32+
if (DateTime.TryParseExact(value.ToString(), format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
3033
{
31-
return result;
34+
return true;
3235
}
3336
}
3437
}
3538

36-
return value;
39+
result = default(DateTime);
40+
41+
return false;
3742
}
3843
}
3944
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
3+
namespace Tokens.Transformers
4+
{
5+
/// <summary>
6+
/// Converts the token value to a <see cref="DateTime"/> in UTC format
7+
/// </summary>
8+
public class ToDateTimeUtcTransformer : ITokenTransformer
9+
{
10+
public object Transform(object value, params string[] args)
11+
{
12+
if (value == null) return string.Empty;
13+
14+
if (ToDateTimeTransformer.ToDateTime(value, args, out var result))
15+
{
16+
value = DateTime.SpecifyKind(result, DateTimeKind.Utc);
17+
}
18+
19+
return value;
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)