Skip to content

Commit 4b54085

Browse files
Merge pull request #26 from stefan-schweiger/date-time-only
Added DateOnly & TimeOnly
2 parents cd31430 + 6e278c3 commit 4b54085

File tree

5 files changed

+26
-5
lines changed

5 files changed

+26
-5
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ jobs:
1515
- name: Setup .NET
1616
uses: actions/setup-dotnet@v1
1717
with:
18-
dotnet-version: 5.0.400
18+
dotnet-version: 6.0.402
1919
- name: Build
2020
run: dotnet test -c Release

src/FSharp.UMX.fs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ open System
1515
[<MeasureAnnotatedAbbreviation>] type TimeSpan<[<Measure>] 'm> = TimeSpan
1616
[<MeasureAnnotatedAbbreviation>] type DateTime<[<Measure>] 'm> = DateTime
1717
[<MeasureAnnotatedAbbreviation>] type DateTimeOffset<[<Measure>] 'm> = DateTimeOffset
18+
#if NET6_0_OR_GREATER
19+
[<MeasureAnnotatedAbbreviation>] type DateOnly<[<Measure>] 'm> = DateOnly
20+
[<MeasureAnnotatedAbbreviation>] type TimeOnly<[<Measure>] 'm> = TimeOnly
21+
#endif
1822

1923
module private Unsafe =
2024
let inline cast<'a, 'b> (a : 'a) : 'b =
@@ -40,6 +44,10 @@ type UMX =
4044
static member inline tag<[<Measure>]'m> (x : TimeSpan) : TimeSpan<'m> = Unsafe.cast x
4145
static member inline tag<[<Measure>]'m> (x : DateTime) : DateTime<'m> = Unsafe.cast x
4246
static member inline tag<[<Measure>]'m> (x : DateTimeOffset) : DateTimeOffset<'m> = Unsafe.cast x
47+
#if NET6_0_OR_GREATER
48+
static member inline tag<[<Measure>]'m> (x : DateOnly) : DateOnly<'m> = Unsafe.cast x
49+
static member inline tag<[<Measure>]'m> (x : TimeOnly) : TimeOnly<'m> = Unsafe.cast x
50+
#endif
4351

4452
static member inline untag<[<Measure>]'m> (x : bool<'m>) : bool = Unsafe.cast x
4553
static member inline untag<[<Measure>]'m> (x : byte<'m>) : byte = Unsafe.cast x
@@ -55,6 +63,10 @@ type UMX =
5563
static member inline untag<[<Measure>]'m> (x : TimeSpan<'m>) : TimeSpan = Unsafe.cast x
5664
static member inline untag<[<Measure>]'m> (x : DateTime<'m>) : DateTime = Unsafe.cast x
5765
static member inline untag<[<Measure>]'m> (x : DateTimeOffset<'m>) : DateTimeOffset = Unsafe.cast x
66+
#if NET6_0_OR_GREATER
67+
static member inline untag<[<Measure>]'m> (x : DateOnly<'m>) : DateOnly = Unsafe.cast x
68+
static member inline untag<[<Measure>]'m> (x : TimeOnly<'m>) : TimeOnly = Unsafe.cast x
69+
#endif
5870

5971
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : bool<'m1>) : bool<'m2> = Unsafe.cast x
6072
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : byte<'m1>) : byte<'m2> = Unsafe.cast x
@@ -70,6 +82,10 @@ type UMX =
7082
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : TimeSpan<'m1>) : TimeSpan<'m2> = Unsafe.cast x
7183
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : DateTime<'m1>) : DateTime<'m2> = Unsafe.cast x
7284
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : DateTimeOffset<'m1>) : DateTimeOffset<'m2> = Unsafe.cast x
85+
#if NET6_0_OR_GREATER
86+
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : DateOnly<'m1>) : DateOnly<'m2> = Unsafe.cast x
87+
static member inline cast<[<Measure>]'m1, [<Measure>]'m2> (x : TimeOnly<'m1>) : TimeOnly<'m2> = Unsafe.cast x
88+
#endif
7389

7490

7591
[<AutoOpen>]

src/FSharp.UMX.fsproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010

1111
<Version>1.0.0</Version>
1212
<PackageVersion>1.0.0</PackageVersion>
13-
14-
<TargetFramework>netstandard2.0</TargetFramework>
1513
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1614
<WarningLevel>5</WarningLevel>
1715

1816
<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>
1917
<DisableImplicitSystemValueTupleReference>true</DisableImplicitSystemValueTupleReference>
18+
<TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
2019
</PropertyGroup>
2120

2221
<ItemGroup>

tests/FSharp.UMX.Tests.fs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ let ``Simple unit of measure conversions with cast operator``() =
3535
let b : byte<foo> = % 1uy
3636
let s : int16<foo> = % 1s
3737
let f : float32<foo> = % 10.0f
38+
let d : DateTime<foo> = % DateTime.Now
39+
let don : DateOnly<foo> = % DateOnly.FromDateTime(DateTime.Now)
40+
let ton : TimeOnly<foo> = % TimeOnly.FromDateTime(DateTime.Now)
3841
()
3942

4043
[<Fact>]
@@ -45,7 +48,10 @@ let ``Simple unit of measure conversions with UMX.tag function``() =
4548
let w = UMX.tag<foo> (sprintf "%O %s %d" %x %y %z)
4649
let b = UMX.tag<foo> (1uy)
4750
let s = UMX.tag<foo> (1s)
48-
let f = UMX.tag<foo> (10.0f)
51+
let f = UMX.tag<foo> (10.0f)
52+
let d = UMX.tag<foo> DateTime.Now
53+
let don = UMX.tag<foo> (DateOnly.FromDateTime(DateTime.Now))
54+
let ton = UMX.tag<foo> (TimeOnly.FromDateTime(DateTime.Now))
4955
()
5056

5157
[<Fact>]

tests/FSharp.UMX.Tests.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net5.0</TargetFrameworks>
54
<IsPackable>false</IsPackable>
5+
<TargetFramework>net6.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

0 commit comments

Comments
 (0)