根据日期c#

时间:2017-05-17 07:43:55

标签: c# excel

我想知道是否有人可以提供帮助......

我已经创建了一个基于4周rota的电子表格,它计算了4周内所有工作小时数,并在月末计算出预期工资。

我现在正在用C#编写一个桌面小工具来显示" Todays"和#34; Tomorrows"开始和结束时间。我使用GemBox.Spreadsheets来解析xls文件中的信息。

因为它基于每周4个工资结构,每个工资期最终会有13个不同的xls文件。

我需要的是确定C#应用程序相对于该支付期自动打开哪个文件。

即:

如果今天的日期> 2017/04/22但是< 2017年5月21日打开文件6.
如果今天的日期> 2017/05/21但是< 18/06/2017打开文件7.
如果今天的日期> 2017年6月18日但是< 2017年7月15日打开文件8.
等...等等......

我似乎无法理解它......

这是我目前的代码:

ExcelFile ef = ExcelFile.Load("wages.xls");
var ws = ef.Worksheets.ActiveWorksheet;
DateTime dateNow = DateTime.Now;
var date = dateNow.Date;
double d = date.ToOADate();
string dateConv = d.ToString();

int objectRow, objectColumn;
ws.Cells.FindText(dateConv, false, false, out objectRow, out objectColumn);

if (objectRow == -1 || objectColumn == -1)
{
    todaysShift.Text = "No Data Found!";
    tomorrowsShift.Text = "No Data Found";
}
else
{
    string todayCellRow = ws.Cells[objectRow, 1].Row.ToString();
    string tomorrowCellRow = ws.Cells[objectRow + 1, 1].Row.ToString();
    DateTime todayStartTime = Convert.ToDateTime(ws.Cells["E" + todayCellRow].Value);
    DateTime todayFinishTime = Convert.ToDateTime(ws.Cells["F" + todayCellRow].Value);
    DateTime tomorrowStartTime = Convert.ToDateTime(ws.Cells["E" + tomorrowCellRow].Value);
    DateTime tomorrowFinishTime = Convert.ToDateTime(ws.Cells["F" + tomorrowCellRow].Value);
    string tdayShiftS = todayStartTime.ToString("HH:mm");
    string tdayShiftF = todayFinishTime.ToString("HH:mm");
    string tmorShiftS = tomorrowStartTime.ToString("HH:mm");
    string tmorShiftF = tomorrowFinishTime.ToString("HH:mm");

    if (tdayShiftS == "00:00" && tdayShiftF == "00:00")
    {
        todaysShift.Text = "Day Off!";
    }
    else
    {
        todaysShift.Text = tdayShiftS + " - " + tdayShiftF;
    }

    if (tmorShiftS == "00:00" && tmorShiftF == "00:00")
    {
        tomorrowsShift.Text = "Day Off!";
    }
    else
    {
        tomorrowsShift.Text = tmorShiftS + " - " + tmorShiftF;
    }
}

2 个答案:

答案 0 :(得分:0)

根据您的描述,您的第一个4周时间似乎从2016年12月3日开始。看起来很奇怪,但您知道的更好。

我们称之为基准日期。如果您只是从“今天”中减去基准日期,您将获得一个TimeSpan,您可以从中计算天数,周数和4周周期。

query("#editor_iframe")[0].contentDocument.documentElement.outerHTML

答案 1 :(得分:0)

我会构建一个包含付费期的所有信息的类和从期间索引和日期构建的构造函数

class PayPeriod
{
    const int DAYS_PER_WEEK = 7;
    const int WEEKS_PER_PERIOD = 4;
    static readonly DateTime _startPeriod = new DateTime( 2017, 01, 01 );

    public PayPeriod( int index )
    {
        Index = index;
        StartDate = _startPeriod.Date.AddDays( ( index - 1 ) * DAYS_PER_WEEK * WEEKS_PER_PERIOD );
        EndDate = StartDate.AddDays( DAYS_PER_WEEK * WEEKS_PER_PERIOD - 1 );
    }

    public static PayPeriod FromDate( DateTime date )
    {
        var index = ( date.Date - _startPeriod ).Days / DAYS_PER_WEEK / WEEKS_PER_PERIOD + 1;
        return new PayPeriod( index );
    }

    public int Index { get; }
    public DateTime StartDate { get; }
    public DateTime EndDate { get; }
}