Как преобразовать DateTime в JulianDate?

#c# #datetime #c#-4.0

#c# #datetime #c #-4.0

Вопрос:

Мне нужно преобразовать DateTime в юлианскую дату в формате YYDDD. Как вы это делаете? Я видел, что в .net есть класс JulianCalendar, но не могу найти ни одного примера, как выполнить преобразование. Я видел несколько ссылок, но ни одна из них не работает.

есть предложения?

ОБНОВЛЕНИЕ Мне дали некоторую дату для преобразования в файл csv, и это включает преобразование DateTime в формат, который я не могу изменить, по-видимому, используется в банковском мире. формат — YYDDD . После некоторого поиска в Google оказалось, что это юлианский календарь. Возможно, я ошибаюсь.Итак, я совершенно не понимаю, что это за формат.

Комментарии:

1. Это не то определение даты по юлианскому календарю, с которым я знаком. (То есть количество дней с четырех с чем-то тысяч до н.э.). Кроме того, не забывайте, что даты по юлианскому календарю начинаются в полдень, а не в полночь . Вы уверены, что используете дату по юлианскому календарю? И с какой стати вам использовать двузначный год, после того как мы потратили миллиарды долларов на решение одной проблемы Y2K? Учитесь на ошибках прошлого.

2. @user712923 итак, не могли бы вы обновить свой вопрос, чтобы уточнить, что именно вам нужно, возможно, с примером?

3. Похоже, что этот формат действительно также называется Julian Date в мире мэйнфреймов … google.com /…

4. Святые угодники. Можно подумать, что банки уже усвоили свой урок. Это ужасный способ представления дат.

5. @Эрик Липперт, аминь этому…

Ответ №1:

Похоже, что этот формат действительно также называется Julian Date в мире мэйнфреймов…

http://www.google.com/search?sourceid=chromeamp;ie=UTF-8amp;q=julian date yyddd

 var myDate = DateTime.Now;
string.Format("{0:yy}{1:D3}", myDate, myDate.DayOfYear);
  

РЕДАКТИРОВАТЬ — Чтобы преобразовать такую строку обратно в дату, можно использовать что-то вроде этого:

 DateTime FromBizarreMainframeFormat(string julianDate) {
    // TODO add validation logic, plus rules to cope with pre-2000 dates
    var yy = 2000   int.Parse(julianDate.SubString(0,2));
    var ddd = int.Parse(julianDate.Substring(2));
    return new DateTime(yy, 1, 1).AddDays(ddd);
}
  

Комментарии:

1. спасибо, что работает так, как задумано. Будет ли это работать в разных культурах?

2. извините, что задаю другой вопрос. как насчет обратного преобразования.

3. разобрать строку на две части (год и дни), затем вычислить дату оттуда: new DateTime(year, 1, 1).AddDays(days - 1)

Ответ №2:

Похоже, вы запрашиваете значение, равное (myDate.Year % 100) * 1000 myDate.DayOfYear . Это довольно простое вычисление.

Если вам нужна строка с начальными нулями, то вы могли бы сделать (myDate.Year % 100).ToString("D2") myDate.DayOfYear.ToString("D3") .