将dateyyyymmdd转换为yyJJJ或Julian Date

在excel和c#中需要一个公式来将“yyyymmdd”格式的数据转换为juliandate格式“yyJJJ”? “JJJ”是Julian提交date。 JJJ是从1到365还是999或366的数字? 我不认为它的366,但我们有闰年,所以它可能是闰年。

在Excel中我试图使用以下内容:

=Year() & DAYS360("20110101","20110930") 

在C#中,我正在使用now()来获取当前date。 但是我想要在1月1日和当前date之间的天数。 不知道这是否是正确的原型公式:

 Prepend Two digit year format to the following Number of Days between "20110101" and "20110930" in "YY" format 

你可以简单地使用JulianCalendar类 ,而不是用C#自己处理

今天在朱利安日历,你可以做:

 JulianCalendar calendar = new JulianCalendar(); var today=DateTime.Today; var dateInJulian = calendar.ToDateTime(today.Year, today.Month, today.Day, today.Hour, today.Minute, today.Second, today.Millisecond); 

编辑:

而且我意识到我没有一个好的方法来帮助你获得你所期待的YYJJJ格式的结果,这很简单:

 var stringResult=string.Format("{0}{1}", dateInJulian.ToString("yy"), dateInJulian.DayOfYear); 

不幸的是,我不认为有相当于dateTime.ToString("JJJ"); 这将给一年中的一天,因此我的小string.Format()变通,但它也可以工作!

EDIT2:

所以Phoog在评论中给了我一点教育,并且指出你今天在Julian日历中没有find,这就是上面的代码给JulianCalendar类所做的。 相反,它看起来你正在寻找序数date(这件作品添加为未来的读者澄清)。 我将要离开上面,这样有人就不会犯同样的错误。 我相信你真正想要的是第一次编辑的代码,但没有JulianCalendar业务,所以:

 var dateToConvert = DateTime.Today // Or any other date you want! var stringResult=string.Format("{0}{1}", dateToConvert.ToString("yy"), dateToConvert.DayOfYear); 

根据这些文章,你应该使用“序号date”而不是“儒略date”这个词:

http://en.wikipedia.org/wiki/Ordinal_date

http://en.wikipedia.org/wiki/Julian_day

根据第一个,序号date的ISO标准规定了一个四位数的年份,范围从1到366,所以1月1号是1。

这当然意味着,3月到12月之间的date将有两个可能的值,取决于date是否在闰年。

因此Bala的解决scheme(在评论中给出+ 1选项)就足够了。

编辑:如Jim Mischel指出的那样, DateTimetypes自己的DayOfYear属性更简单,可能更快。

在C#中你可以做

 DateTime dt = DateTime.Now; DateTime firstJan = new DateTime(dt.Year, 1, 1); int daysSinceFirstJan = (dt - firstJan).Days + 1; 

我相信你正在寻找的是这样的:

 DateTime dt = DateTime.Now; string ordinalDate = dt.ToString("yy") + dt.DayOfYear.ToString("000"); 

这将给你一个string,总是5位数字,一年两位数字和三位数字的一天。 凯维克答案会给你一个string,可能是3,4,或5位数字。