#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")
.