PCB 生产周期计算逻辑与代码实现
PCB生产周期计算逻辑:

代码实现:
调用代码:
getWeek(DateTime.Now.Date, "WWYY", );
周期计算逻辑:
/// <summary>
/// 获取周期
/// </summary>
/// <param name="CurrentDate">填写计算日期</param>
/// <param name="Format">YYYY,YY,WW,MM,DD</param>
/// <param name="AddDay">增加周期日期</param>
/// <returns></returns>
public string getWeek(DateTime CurrentDate, string Format, int AddDay = )
{
string YYYY, YY, MM, DD, WW;
CurrentDate = CurrentDate.AddDays(AddDay);
//CurrentDate = DateTime.Parse("2014-12-29");
YYYY = CurrentDate.Year.ToString();
YY = YYYY.Substring(, );
MM = CurrentDate.Month.ToString().PadLeft(, '');
DD = CurrentDate.Day.ToString().PadLeft(, '');
WW = "";
if (Format.IndexOf("WW") > -)
{
int StartWeek = ;
DateTime CurrentStartDate = new DateTime(CurrentDate.Year, , );
DateTime CurrentFirstWeekDate = getFirstWeekDate(CurrentStartDate, StartWeek);
int DayCount = , WeekCount = , WeekDayCount = , WeekNum = , YearNum = , MonthNum = ;
if (CurrentDate >= CurrentFirstWeekDate)
{
DateTime NextStartDate = new DateTime(CurrentDate.Year + , , );
DateTime NextFirstWeekDate = getFirstWeekDate(NextStartDate, StartWeek);
if (CurrentDate >= NextFirstWeekDate)
{
DayCount = (CurrentDate - NextFirstWeekDate).Days + ;
YearNum = NextStartDate.Year;
MonthNum = NextStartDate.Month;
}
else
{
DayCount = (CurrentDate - CurrentFirstWeekDate).Days + ;
YearNum = CurrentStartDate.Year;
MonthNum = CurrentStartDate.Month;
}
}
else
{
DateTime PreviouStartDate = new DateTime(CurrentDate.Year - , , );
DateTime PreviouFirstWeekDate = getFirstWeekDate(PreviouStartDate, StartWeek);
DayCount = (CurrentDate - PreviouFirstWeekDate).Days + ;
YearNum = PreviouStartDate.Year;
MonthNum = PreviouStartDate.Month;
}
WeekCount = (int)Math.Floor(DayCount / 7.0);
WeekDayCount = DayCount % ;
WeekNum = WeekCount + (int)Math.Ceiling(WeekDayCount / 7.0);
YYYY = YearNum.ToString();
YY = YYYY.Substring(, );
MM = MonthNum.ToString().PadLeft(, '');
WW = WeekNum.ToString().PadLeft(, '');
} return Format.Replace("YYYY", YYYY).Replace("YY", YY).Replace("MM", MM).Replace("DD", DD).Replace("WW", WW);
}
/// <summary>
/// 获取当前日期第一周 开始的日期
/// </summary>
/// <param name="StartDate">计算日期</param>
/// <param name="StartWeek">起始周期</param>
/// <returns>第一周日期</returns>
public DateTime getFirstWeekDate(DateTime StartDate, int StartWeek = )
{
int CurrentWeek = (int)StartDate.DayOfWeek == ? : (int)StartDate.DayOfWeek;
int CurrentWeekDiff = CurrentWeek <= StartWeek ? -CurrentWeek + : - CurrentWeek + ;
DateTime CurrentFirstWeekDate = StartDate.AddDays(CurrentWeekDiff);
return CurrentFirstWeekDate;
}
实现Demo效果:

PCB 生产周期计算逻辑与代码实现的更多相关文章
- 关于 MFRC522引脚功能图
MFRC522是属于13.56mhz芯片.另外SI522也是13.56mhz芯片,SI522 PIN对PIN完全兼容MFRC522,并且软硬件兼容,且引脚功能图都是一样的,功能方面比MFRC522多A ...
- 13.56Mhz SI522兼容MFRC522的资料以及对比性能
(13.56Mhz芯片) SI522是一颗专门替代MFRC522/FM17522,PIN对PIN 完全软硬件兼容.相对于MFRC522,SI522完全替换,不需要做任何更改,同时接受模式下功耗低10m ...
- 20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程. ...
- Nodejs实战 —— 测试 Node 程序
读 <node.js实战2.0>,进行学习记录总结. 当当网购买链接 豆瓣网1.0链接 测试 Node 程序 本章内容 用 Node 的 assert 模块测试 使用其他断言库 使用 No ...
- 【牛客 错题集】Linux系统方面错题合集
前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...
- UNIX C 总结
--day01--王建立QQ:2529866769今天的内容:一.计算机的框架什么是操作系统?(汽车)加油系统 油门 用户跟加油子系统交互的窗口.(接口)方向系统 方向盘 用户跟方向系统的交互接口.导 ...
- SI522和RC522/ZS3801/FM17520的区别
小编最近在测试一颗新的芯片,是国内知名厂家中科微研发的,主打超低功耗的厂家. 经过测试和比较小编发现 相对于MFRC522,SI522可以完全替换,不需要做任何更改,同时接受模式下功耗低10mA左右, ...
- ETC系列产品非接触式读卡器方案:SI522
随着科技的不断发展,出行上高速这是非常寻常的事.但是在很多节假日高峰时期,在高速路口塞车缴费给很多车主造成很大的烦心.为了解决这一系列的问题,科技发明了ETC这种便捷式缴费技术,让车主们顺畅通过高速路 ...
- 抗干扰性极强非接触式读卡13.56mhz芯片:SI522
由于智能门锁产品不断地火爆,市场上的不断出现破解的方法.对此中科微联合深圳市动能世纪科技有限公司不断满足市场需求,推出一款抗干扰性极强的13.56mhz芯片. 该芯片出了抗干扰性强以外还直接PIN2P ...
随机推荐
- (转)Arcgis for javascript实现百度地图ABCD marker的效果
概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...
- 项目关联到svn
最近因为要升级项目,改用64位的eclipse,原先已经被svn管理的项目需要被复制到另一个工作空间,只需要导入并复制项目到新的工作空间即可 右键,点import 选择已经存在的项目导入工作空间 选择 ...
- day07-列表类型/元组类型/字典类型/集合类型内置方法
目录 列表类型内置方法 元组类型内置方法 字典类型内置方法 集合类型内置方法 列表类型内置方法 用来存多个元素,[]内用逗号隔开任意数据类型的元素 1. list()强制类型转换 print(list ...
- PC、h5项目接入第三方支付宝扫码登录、扫码付款
首先介绍一下pc项目接入支付宝扫码支付. 1.pc.移动接入支付宝扫码支付. 其实这个逻辑很简单,前端所需要处理的不是很多,后台会给一个连接,前端只需要将要支付的订单id拼接在这个连接上,然后打开跳转 ...
- Java中接口与接口和类之间的关系
接口和接口之间的关系 继承关系 可以多继承,并且可以多层继承 注意: 1.如果多个父接口中有同名的抽象方法,那么子接口只需要实现一次即可 2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方 ...
- 关于JS中的方法是否加括号的问题
js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...
- strcpy & memcpy区别
这两个经常使用的函数,主要区别有: strcpy 返回值是char *, strcpy(x1, x2); x1 x2必须都是char* 类型 memcpy(x1, x2, sizeof(xx)); m ...
- java ArrayList去重复值
public static List removeDuplicateWithOrder(List list) { Set set = new HashSet(); List newList = new ...
- Luogu P1550 打井Watering Hole
P1550 [USACO08OCT]打井Watering Hole 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to ...
- HDU 1465(错排公式)
不容易系列之一 题意: 一个人要寄n个信封,结果装错了.信纸的编号为1到n,信封的编号为1到n,信纸的编号不能和信封的编号一样,全都不能一样. 思路:错排公式. D(n)表示n件信封装错的所有的情况. ...