Конвертировать дату между java и .net - 2 выходных

Мне нужно преобразовать .NETDateTime в эквивалентную JavaCalendar представление.

СетьDateTime использованияTicks поскольку1 января 0001 (эпоха .NET) в качестве основного представления.

ЯваGregorianCalendar использует миллисекунды с1 января 1970 г. (эпоха Java (или Unix)). Как и ожидалось, значение является отрицательным для дат до эпохи Java.

Здесь я'м трансформируетDateTime представление в миллис сДжава эпоха:

var dt = new DateTime(1,2,3);  //way, way back.
var javaEpoch = new DateTime(1970, 1, 1);

var javaMillis = (dt - javaEpoch).Ticks / TimeSpan.TicksPerMillisecond;

dt.ToString("MM/dd/yyyy").Dump();          // .Dump() is provided by LinqPad. 
javaMillis.Dump();                         // Use Console.WriteLine(...)
                                           // for a regular console app.

Это выводит:

02 /03/ 0001

-62132745600000

Теперь скопируйте и вставьте значение миллисекунды в этот фрагмент Java:

java.util.Calendar cal = new java.util.GregorianCalendar();
cal.setTimeInMillis(-62132745600000L);
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat();
df.applyPattern("MM/dd/yyyy");
System.out.println(df.format(cal.getTime()));

Это выводит:

02 /05/ 0001

Я предполагаю, что мой вопрос: как я должен получить действительное значение в миллисекундах из DateTime, из которого я могу правильно построить календарь Java?

... с подразумеваемым подвопросом "что на самом деле здесь происходит?

РЕДАКТИРОВАТЬ: я играл с DateTimeValues вокруг пропущенного диапазона дат от юлианского до григорианского календаря (4 октября 1582 это "а затем» к 15 октября 1582 г.)

Для дат, более поздних, чем 15 октября 1582 г., конверсия, кажется, работает нормально.

... Но вокруг пропущенного диапазона начинается DateTime (или, скорее,не начать) действовать смешно

var timespan = new DateTime(1582, 10, 15) - new DateTime(1582, 10, 4);

возвращаетTimeSpan 11 дней, поэтому дыра не учитывается операторами DateTime. Что дает? Я думал, что базовая реализация основана на.System.Globalization.GregorianCalendar

Ответы на вопрос(3)

Ваш ответ на вопрос