Calendar to julian date format
1.JULIAN DATE 定义
2.示例:
定义枚举:
public enum JulianDateType
{
/// <summary>
/// Julian Date (JD)
/// </summary>
JD,
/// <summary>
/// Julian Day Number (JDN)
/// </summary>
JDN,
/// <summary>
/// Chronological JD (CJD)
/// </summary>
CJD,
/// <summary>
/// Reduced JD (RJD)
/// </summary>
RJD,
/// <summary>
/// Modified JD (MJD)
/// </summary>
MJD,
/// <summary>
/// Truncated JD (TJD)
/// </summary>
TJD,
/// <summary>
/// Dublin JD (DJD)
/// </summary>
DJD,
/// <summary>
/// Lilian Date
/// </summary>
LD,
/// <summary>
/// Military Julian Date(yddd)
/// </summary>
JDD,
/// <summary>
/// Ordinal date
/// </summary>
OD
}
2.转换方法
private static Dictionary<string, int> offsetdictionary = new Dictionary<string, int>()
{
{"GMT-12:00",-720},{"GMT-11:00",-660},{"GMT-10:00",-600},{"GMT-09:30",-570},{"GMT-09:00",-540},{"GMT-08:00",-480},
{"GMT-07:00",-420},{"GMT-06:00",-360},{"GMT-05:00",-300},{"GMT-04:30",-270},{"GMT-04:00",-240},{"GMT-03:30",-210},
{"GMT-03:00",-180},{"GMT-02:00",-120},{"GMT-01:00",-60},{"GMT-00:00",0},{"GMT+01:00",60},{"GMT+02:00",120},
{"GMT+03:00",180},{"GMT+03:30",210},{"GMT+04:00",240},{"GMT+04:30",270},{"GMT+05:00",300},{"GMT+05:30",330},
{"GMT+05:45",345},{"GMT+06:00",360},{"GMT+06:30",390},{"GMT+07:00",420},{"GMT+08:00",480},{"GMT+09:00",540},
{"GMT+09:30",570},{"GMT+10:00",600},{"GMT+10:30",630},{"GMT+11:00",660},{"GMT+11:30",690},{"GMT+12:00",720},
{"GMT+12:45",765},{"GMT+13:00",780},{"GMT+14:00",840}
};
/// <summary>
/// Calendar to julian date format
/// </summary>
/// <param name="_year">year size 4</param>
/// <param name="_month">month size 2</param>
/// <param name="_day">day szie 2</param>
/// <param name="_hours"> hours szie 2</param>
/// <param name="_minutes">minutes size 2</param>
/// <param name="_seconds">seconds size 2</param>
/// <param name="jdtype">enum JulianDateType</param>
/// <returns>convert julian date value</returns>
public static string CalendarDateToJD(int _year, int _month, int _day, int _hours, int _minutes, int _seconds, JulianDateType jdtype)
{
string calendarstring = "";
decimal jddate = 0;
int dayN = 0, feb = 0;
int cur_offset = offsetdictionary["GMT+08:00"];
//验证是否为空
if (((_year % 4) == 0 && (_year % 100) != 0) || (_year % 400) == 0)
{
// leap year
if ((_month == 2) && (_day > 29))
{
//Msg:"Leap year: February cannot have more than 29 days.
return "Leap year: February cannot have more than 29 days";
}
feb = 29;
}
else
{
// nonleap year
if ((_month == 2) && (_day > 28))
{
return "February cannot have more than 28 days.";
}
feb = 28;
}
if (((_month == 4) || (_month == 6) || (_month == 9) || (_month == 11)) && (_day > 30))
{
return "This month cannot have more than 30 days.";
}
for (var i = 1; i < _month; i++)
{
if ((i == 4) || (i == 6) || (i == 9) || (i == 11))
{
dayN += 30;
}
else if (i == 2)
{
dayN += feb;
}
else
{
dayN += 31;
}
}
double a = 7 * (_year + (_month + 9) / 12) / 4;
double b = 3 * ((_year + (_month - 9) / 7) / 100 + 1) / 4;
double c = 275 * _month / 9;
jddate = 367 * Convert.ToDecimal(_year) - Convert.ToDecimal(a) - Convert.ToDecimal(b) +
Convert.ToDecimal(c + _day + 1721028.5) + (Convert.ToDecimal(_hours) +
(Convert.ToDecimal(_minutes) / 60) + (Convert.ToDecimal(_seconds) / 3600) - (Convert.ToDecimal(cur_offset) / 60)) / 24;
switch (jdtype)
{
case JulianDateType.JD:
calendarstring = Math.Round(jddate, 7).ToString();
break;
case JulianDateType.JDN:
calendarstring = jddate.ToString().Substring(0, jddate.ToString().IndexOf("."));
break;
case JulianDateType.CJD:
string fraction = "0." + cur_offset;
if (fraction.IndexOf("-") > -1) fraction = "0";
jddate = Math.Round(jddate, 7) + Convert.ToDecimal(0.5) + Convert.ToDecimal(fraction) * 60 / 100;
calendarstring = jddate.ToString();
break;
case JulianDateType.RJD:
jddate = jddate - 2400000;
calendarstring = Math.Round(jddate, 7).ToString();
break;
case JulianDateType.MJD:
jddate = jddate - Convert.ToDecimal(2400000.5);
calendarstring = Math.Round(jddate, 7).ToString();
break;
case JulianDateType.TJD:
decimal intFraction = _hours * 3600 + _minutes * 60 + _seconds;
jddate = jddate - Convert.ToDecimal(2440000.5);
calendarstring = jddate.ToString().Substring(0, jddate.ToString().IndexOf(".")) + "/" + intFraction;
break;
case JulianDateType.DJD:
calendarstring = Math.Round(jddate - 2415020, 7).ToString();
break;
case JulianDateType.LD:
jddate = jddate - Convert.ToDecimal(2299160.5);
calendarstring = jddate.ToString().Substring(0, jddate.ToString().IndexOf("."));
break;
case JulianDateType.JDD:
dayN += _day;
calendarstring = (_year.ToString() + dayN.ToString()).Substring(3);
break;
case JulianDateType.OD:
dayN += _day;
calendarstring = _year.ToString() + dayN.ToString();
break;
}
return calendarstring;
}
Calendar to julian date format的更多相关文章
- javascript Date format(js日期格式化) (转)
方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) ...
- [转]javascript Date format(js日期格式化)
方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) ...
- javascript Date format(js日期格式化)
这个用这比较爽,记录一下// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年( ...
- [荐]javascript Date format(js日期格式化)
cnblog:http://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html 方法一: // 对Date的扩展,将 Date ...
- JS Date.Format
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- Javascript Date Format
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- Date Format, 时间戳格式化
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- js new Date().Format
/** * * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符 * 年(y)可以用 1-4 ...
- GG同步sqlserver报错一个案例 Invalid date format
在里面Oracle表同步sqlserver时间,在sqlserver当应用程序数据的结束.您可能会遇到这个错误. 2014-05-17 17:20:24 WARNING OGG-01154 SQL e ...
随机推荐
- SPSS超详细操作:分层回归(hierarchical multiple regression)
SPSS超详细操作:分层回归(hierarchical multiple regression) 1.问题与数据 最大携氧能力(maximal aerobic capacity, VO2max)是评价 ...
- Vue中的better-scroll插件
Vue中的better-scroll插件 在需要的文件中添加 import BScorll from 'better-scroll'; 引用的示例代码: let scroll = new BScrol ...
- 阿里巴巴毕玄解密AIOps:一文读懂阿里巴巴运维体系的前世今生
[编者按]林昊(毕玄),阿里巴巴研发效能事业部负责人.2007年加入阿里,10年间打造了阿里目前使用最为广泛的核心中间件之一的服务框架:建设了阿里的HBase团队,发展到今天HBase已经是阿里最重要 ...
- 阿里云 Aliplayer高级功能介绍(六):进度条标记
基本介绍 Aliplayer在进度条上提示时间和缩略图功能外,还可以进行视频内容的提示打点,当然不止是进度条上显示打点的内容,还提供一组接口,方便用户进行打点时间和内容的获取, 基本UI如下图所示: ...
- Android SDK上手指南:Activity与生命周期
Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...
- org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
从hibernate3升级到4应该会遇到 应该添加引用 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 ...
- 爬虫(三)通过Selenium + Headless Chrome爬取动态网页
一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...
- PHP基于openssl实现的非对称加密操作
使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密. 1.安装openssl和php的openssl扩展 2.生成私钥:openssl genrsa 用于生成 ...
- mybatis学习:mybatis的注解开发CRUD操作
Dao层: public interface IUserDao { /** * 查询所有结果 * @return */ @Select("select * from user") ...
- Docker(一)简介及核心概念
1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这 ...