diff --git a/src/Dapr.Workflow/WorkflowState.cs b/src/Dapr.Workflow/WorkflowState.cs
index 15dcce08c..3082cd8a6 100644
--- a/src/Dapr.Workflow/WorkflowState.cs
+++ b/src/Dapr.Workflow/WorkflowState.cs
@@ -31,7 +31,7 @@ internal WorkflowState(WorkflowMetadata? metadata)
{
_metadata = metadata;
}
-
+
///
/// Gets a value indicating whether the requested workflow instance exists.
///
@@ -53,12 +53,16 @@ WorkflowRuntimeStatus.Failed or
///
/// Gets the time at which this workflow instance was created.
///
- public DateTimeOffset CreatedAt => _metadata?.CreatedAt ?? default;
+ public DateTimeOffset CreatedAt => _metadata?.CreatedAt is { } dt && dt != default
+ ? new DateTimeOffset(DateTime.SpecifyKind(dt, DateTimeKind.Utc))
+ : default;
///
/// Gets the time at which this workflow instance last had its state updated.
///
- public DateTimeOffset LastUpdatedAt => _metadata?.LastUpdatedAt ?? default;
+ public DateTimeOffset LastUpdatedAt => _metadata?.LastUpdatedAt is { } dt && dt != default
+ ? new DateTimeOffset(DateTime.SpecifyKind(dt, DateTimeKind.Utc))
+ : default;
///
/// Gets the execution status of the workflow.
diff --git a/test/Dapr.Workflow.Test/WorkflowStateTests.cs b/test/Dapr.Workflow.Test/WorkflowStateTests.cs
index 5fc99930c..9f94cef14 100644
--- a/test/Dapr.Workflow.Test/WorkflowStateTests.cs
+++ b/test/Dapr.Workflow.Test/WorkflowStateTests.cs
@@ -56,11 +56,29 @@ public void Properties_ShouldReflectMetadata_WhenPresent()
Assert.True(state.Exists);
Assert.True(state.IsWorkflowRunning);
Assert.False(state.IsWorkflowCompleted);
- Assert.Equal(created, state.CreatedAt);
- Assert.Equal(updated, state.LastUpdatedAt);
+ Assert.Equal(created, state.CreatedAt.DateTime);
+ Assert.Equal(updated, state.LastUpdatedAt.DateTime);
Assert.Equal(WorkflowRuntimeStatus.Running, state.RuntimeStatus);
}
+ [Fact]
+ public void CreatedAt_ShouldReturnDefault_WhenMetadataCreatedAtIsMinValue()
+ {
+ var serializer = new JsonWorkflowSerializer();
+ var metadata = new WorkflowMetadata(
+ InstanceId: "i",
+ Name: "wf",
+ RuntimeStatus: WorkflowRuntimeStatus.Running,
+ CreatedAt: DateTime.MinValue,
+ LastUpdatedAt: DateTime.MinValue,
+ Serializer: serializer);
+
+ var state = new WorkflowState(metadata);
+
+ Assert.Equal(DateTime.MinValue, state.CreatedAt.DateTime);
+ Assert.Equal(DateTime.MinValue, state.LastUpdatedAt.DateTime);
+ }
+
[Theory]
[InlineData(WorkflowRuntimeStatus.Completed)]
[InlineData(WorkflowRuntimeStatus.Failed)]