I'm trying to convert date strings to Unix time using dotnet 6 and during my testing, I found a strange result between two timestamps that are milliseconds apart. My conversion code is (commented out bits are the variations I've tried and the results are the same):

```cs
static long convert_to_unix_time(DateTime date){ 
    return new DateTimeOffset(date, TimeSpan.Zero).ToUnixTimeMilliseconds();
}

static DateTime convert_to_timestamp(string date, string format) {
    string[] param = new string[1];
    param[0] = format;

    var final = new DateTime();
    var parsed_time = DateTime.TryParseExact(
        date,
        param,
        CultureInfo.GetCultureInfo("en-ZA"), //CultureInfo.CurrentCulture, //CultureInfo.Invariant, 
        DateTimeStyles.None,
        out final);
        return final;
    }

```

Running this:

```cs
var date1 = "20201214 13:00:04.156";
var date2 = "20201214 12:59:59.999";
string format = "yyyyMMdd hh:mm:ss.fff";

var final1 = convert_to_timestamp(date1, format);
var unix_time1 = convert_to_unix_time(final1);

Console.WriteLine("final1 is: {0}", final1.ToString(format));
Console.WriteLine("unix time1 is: {0}", unix_time1);

var final2 = convert_to_timestamp(date2, format);
var unix_time2 = convert_to_unix_time(final2);

Console.WriteLine("final2 is: {0}", final2.ToString(format));
Console.WriteLine("unix time2 is: {0}", unix_time2);

```

The output I get is:

```
final1 is: 00010101 12:00:00.000
unix time1 is: -62135596800000
final2 is: 20201214 12:59:59.999
unix time2 is: 1607907599999

```

I can't for the life of me figure out what's causing this error, or even what to call it or search for.

Is there a way to get the correct result?

[dotnet fiddle](https://dotnetfiddle.net/mas4lW)