Converting Unix Timestamps to `DateTimeOffset` in C# with `FromUnixTimeMilliseconds()`

Learn how to efficiently convert Unix timestamps (milliseconds) into `DateTimeOffset` objects in C# using `DateTimeOffset.FromUnixTimeMilliseconds()`. This tutorial explains its functionality, demonstrates its use with examples, and highlights the importance of handling time zone information for accurate date and time representation.



Using C#'s `DateTimeOffset.FromUnixTimeMilliseconds()` Method

The C# `DateTimeOffset.FromUnixTimeMilliseconds()` method converts a Unix timestamp (represented in milliseconds) into a `DateTimeOffset` object. Unix time is a system for tracking time as the number of seconds past a specific point in time (January 1, 1970, 00:00:00 UTC).

Understanding Unix Time and `DateTimeOffset`

Unix time is a simple way to represent a point in time, but it lacks time zone information. The `DateTimeOffset` structure in C#, however, includes both the date and time and the offset from Coordinated Universal Time (UTC), making it ideal for applications needing time zone awareness.

`DateTimeOffset.FromUnixTimeMilliseconds()` Syntax


public static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds);

The method takes a `long` integer representing the Unix timestamp in milliseconds and returns a `DateTimeOffset` object.

Example 1: Basic Conversion


long unixTimestampMillis = 1678886400000; //Example Unix timestamp in milliseconds
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(unixTimestampMillis);
Console.WriteLine(dateTimeOffset); //Prints the DateTimeOffset, including the offset from UTC

Example 2: Handling Time Zones


long unixTimestampMillis = 1678886400000;
TimeSpan timeZoneOffset = TimeSpan.FromHours(-5); //Example: UTC-5
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(unixTimestampMillis).ToOffset(timeZoneOffset);
Console.WriteLine(dateTimeOffset); //Prints DateTimeOffset adjusted for time zone

Important Notes

  • Unix time doesn't account for leap seconds.
  • Always handle potential exceptions (like `ArgumentOutOfRangeException`).