Comprehensive Analysis of DateTime to long Conversion and Vice Versa in C#

Dec 11, 2025 · Programming · 9 views · 7.8

Keywords: C# | DateTime | long conversion | .NET | Ticks

Abstract: This article delves into the bidirectional conversion between DateTime and long types in C# and .NET environments. By analyzing the DateTime.Ticks property and DateTime(long) constructor, it provides complete solutions for converting DateTime to long and restoring DateTime from long. The paper explains the principle of Ticks as a time baseline, compares applicable scenarios of different conversion methods, and offers practical code examples. Additionally, it discusses timezone handling, performance optimization, and common pitfalls, offering developers a thorough technical reference.

Core Mechanism of DateTime and long Type Conversion

In C# and .NET development, converting DateTime objects to long type and reversing the process is a common requirement for handling time-series data, database storage, and cross-platform communication. The core of this conversion lies in utilizing the DateTime.Ticks property, which represents the number of 100-nanosecond intervals that have elapsed since 12:00:00 midnight, January 1, 0001. Ticks is a 64-bit signed integer, providing high-precision time representation, making it an ideal choice for long type conversion.

Conversion from DateTime to long

To convert DateTime to long, you can directly access the DateTime.Ticks property. For example:

DateTime now = DateTime.Now;
long ticks = now.Ticks;
Console.WriteLine("Ticks value: " + ticks);

This code retrieves the Ticks value of the current time and stores it in a long variable. The numerical range of Ticks is vast, capable of precisely representing time from year 1 to year 9999, ensuring broad applicability of the conversion.

Restoration from long to DateTime

Reverse conversion is achieved through the DateTime constructor, which accepts a long parameter as the Ticks value. For example:

long storedTicks = 638134848000000000; // Example Ticks value
DateTime restoredDate = new DateTime(storedTicks);
Console.WriteLine("Restored date: " + restoredDate);

Here, storedTicks represents the Ticks of a specific time, and new DateTime(storedTicks) can accurately restore the original DateTime object. This method is straightforward and requires no additional method calls.

Practical Applications and Code Examples

Below is a complete example demonstrating the bidirectional conversion process:

using System;

class Program
{
    static void Main()
    {
        // Original DateTime object
        DateTime originalDate = new DateTime(2023, 10, 5, 14, 30, 0);
        Console.WriteLine("Original date: " + originalDate);

        // Convert to long
        long ticks = originalDate.Ticks;
        Console.WriteLine("Converted Ticks: " + ticks);

        // Restore from long to DateTime
        DateTime restoredDate = new DateTime(ticks);
        Console.WriteLine("Restored date: " + restoredDate);

        // Verify conversion accuracy
        bool isEqual = originalDate == restoredDate;
        Console.WriteLine("Is conversion accurate: " + isEqual); // Output: True
    }
}

This example shows conversion from DateTime to long and back, verifying the accuracy of the process. The output confirms the lossless nature of the conversion.

Comparison with Other Conversion Methods

Beyond Ticks, developers sometimes use methods like ToFileTime or ToBinary for conversion. ToFileTime converts DateTime to Windows file time format (number of 100-nanosecond intervals since January 1, 1601), suitable for filesystem operations; ToBinary generates a 64-bit signed integer including Kind information (Local or Utc). However, these methods require corresponding FromFileTime or FromBinary methods for restoration, making them less direct than Ticks. For example:

DateTime date = DateTime.Now;
long fileTime = date.ToFileTime();
DateTime fromFileTime = DateTime.FromFileTime(fileTime);

While feasible, Ticks conversion is recommended for its simplicity and universality.

Considerations and Best Practices

When converting between DateTime and long, note the following: First, ensure the long value is within DateTime's valid range (Ticks between 0 and 3155378975999999999, corresponding to years 1 to 9999). Second, consider timezone issues: Ticks conversion does not include timezone information; if the application involves cross-timezone operations, it is advisable to use DateTime's Utc time or store timezone data separately. Additionally, for high-performance scenarios, direct use of Ticks avoids method call overhead. Finally, in database storage, long type is typically used as a BIGINT column, ensuring data type compatibility.

Conclusion

Through the DateTime.Ticks property and DateTime(long) constructor, C# developers can efficiently achieve bidirectional conversion between DateTime and long types. This method is based on .NET's time-handling mechanism, offering high precision and reliability. In practical development, it is recommended to prioritize Ticks for conversion unless specific needs exist (e.g., file time processing). Understanding these principles helps optimize the storage and transmission of time data, enhancing application performance.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.