Skip to content

Instantly share code, notes, and snippets.

@pjmagee
Created May 6, 2024 21:47
Show Gist options
  • Save pjmagee/2ce91e363453ace44c8f875dc1f57c1c to your computer and use it in GitHub Desktop.
Save pjmagee/2ce91e363453ace44c8f875dc1f57c1c to your computer and use it in GitHub Desktop.
RFC 3339 Easy.
void Main()
{
string[] formats =
{
"yyyy-MM-dd'T'HH:mm:ss.fffffffK",
"yyyy-MM-dd'T'HH:mm:ss.ffffffK",
"yyyy-MM-dd'T'HH:mm:ss.fffffK",
"yyyy-MM-dd'T'HH:mm:ss.ffffK",
"yyyy-MM-dd'T'HH:mm:ss.fffK",
"yyyy-MM-dd'T'HH:mm:ss.ffK",
"yyyy-MM-dd'T'HH:mm:ss.fK",
"yyyy-MM-dd'T'HH:mm:ssK",
"yyyy-MM-dd'T'HH:mmK",
"yyyy-MM-dd'T'HH:mm:ss.fffffffK",
"yyyy-MM-dd'T'HH:mm:ss.ffffffK",
"yyyy-MM-dd'T'HH:mm:ss.fffffK",
"yyyy-MM-dd'T'HH:mm:ss.ffffK",
"yyyy-MM-dd'T'HH:mm:ss.fffK",
"yyyy-MM-dd'T'HH:mm:ss.ffK",
"yyyy-MM-dd'T'HH:mm:ss.fK",
"yyyy-MM-dd'T'HH:mm:ssK",
"yyyy-MM-dd'T'HH:mmK"
};
// Usage
foreach (var rfc3339String in RFC3339Generator.GenerateDateTimeSamples())
{
if (DateTimeOffset.TryParseExact(rfc3339String, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate))
{
$"Parsed DateTimeOffset: {string.Format("{0:yyyy-MM-dd'T'HH:mm:ss.fffffffK}", parsedDate)}".Dump(rfc3339String);
}
else
{
Console.WriteLine("Failed to parse RFC 3339 date string.");
}
}
}
public class RFC3339Generator
{
public static IEnumerable<string> GenerateDateTimeSamples()
{
// Base date and time with specific milliseconds
var baseDateTime = new DateTime(2023, 5, 6, 14, 35, 48, 123, DateTimeKind.Utc); // 123 milliseconds
// Time zones to consider: UTC and various offsets
var timeZones = new List<string> { "Z", "+00:00", "-08:00", "+05:30", "+12:45", "-11:30" };
// Generate date-times with different levels of precision
foreach (var timeZone in timeZones)
{
// Full date and time with seconds
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss{timeZone}");
// Full date and time with milliseconds and further fractional seconds
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss.fff{timeZone}"); // Milliseconds
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss.ffff{timeZone}"); // 10 microseconds
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss.fffff{timeZone}"); // 100 nanoseconds
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss.ffffff{timeZone}"); // 1 microsecond
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm:ss.fffffff{timeZone}"); // 0.1 microsecond
// Generating with hour and minute precision
yield return baseDateTime.ToString($"yyyy-MM-dd'T'HH:mm{timeZone}");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment