Created
May 6, 2024 21:47
-
-
Save pjmagee/2ce91e363453ace44c8f875dc1f57c1c to your computer and use it in GitHub Desktop.
RFC 3339 Easy.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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