Как найти разницу между двумя датами строкового типа? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть 2 строки. Скажем, Meter_read_date = "2019-10-04" Settlement_date = "2019-10-02"

Я хотел написать Условие так, чтобы, если разница между метром_датчика_поселения и датой посадки быламенее 5 0r metter_read_date = creation_date, чем что-то делать или что-то еще делать)

у меня есть следующий код:

if (RegID > 0)
{
    var MPAN = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.MPAN }).FirstOrDefault();
    var D0071_SEND = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.D0071_SEND }).FirstOrDefault();
    var ROLECODE = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.ROLECODE }).FirstOrDefault();
    var TARIFFTYPE = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.TariffType }).FirstOrDefault();
    var NORMAL_METER_READ = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.NORMAL_METER_READ }).FirstOrDefault();
    var LOW_METER_READ = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.LOW_METER_READ }).FirstOrDefault();
    var METER_READ_DATE = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.METER_READ_DATE }).FirstOrDefault();
    var BILL_GENERATED = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.BILL_GENERATED }).FirstOrDefault();
    var SETTLEMENT_DATE_REGI = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.SETTLEMENT_DATE_REGI }).FirstOrDefault();
    var CUST_REFERENCE = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.CUST_REF_NUMBER }).FirstOrDefault(); //added by amit on 18-06-19
    var ADDRESS = (from reg in ApproveCustRead where reg.REGISTRATION_ID == RegID select new { reg.CUST_ADDRESS }).FirstOrDefault(); // added by amit on 19-06-19



    if (Flow == "71")
    {
        D0071Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(SETTLEMENT_DATE_REGI.SETTLEMENT_DATE_REGI.Trim()));
    }
    else if (Flow == "10")
    {
        D0010Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(METER_READ_DATE.METER_READ_DATE.Trim()));
    }
    else if (Flow == "RR")
    {
        DateTime startdate = Convert.ToDateTime(METER_READ_DATE);//latest date
                                    DateTime enddate = Convert.ToDateTime(SETTLEMENT_DATE_REGI);//old date
                                    string D0071send = Convert.ToString(D0071_SEND);
                                    if ((startdate - enddate).Days < 5  || startdate.Date==enddate.Date)
                                    {
                                        if(D0071send == "YES")
                                        {
                                            D0010Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(METER_READ_DATE.METER_READ_DATE.Trim()));

                                        }
                                        else
                                        {
                                            D0071Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(SETTLEMENT_DATE_REGI.SETTLEMENT_DATE_REGI.Trim()));

                                        }
                                    }
                                    else
                                    {
                                        D0010Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(METER_READ_DATE.METER_READ_DATE.Trim()));

                                    }
    }
}

Может кто-нибудь просветить меня с этим? Любая помощь будетоценил. Я пробовал в другом, если (flow = "RR"), но не работал.

Ответы [ 3 ]

1 голос
/ 08 октября 2019

Это сработало для меня:

DateTime startdate = Convert.ToDateTime(Convert.ToString(METER_READ_DATE.METER_READ_DATE));//latest date
                                    DateTime enddate = Convert.ToDateTime(Convert.ToString(SETTLEMENT_DATE_REGI.SETTLEMENT_DATE_REGI));//old date
                                    string D0071send = Convert.ToString(D0071_SEND);
                                    if ((startdate - enddate).Days < 5  || startdate.Date==enddate.Date)
                                    {
                                        if(D0071send == "YES")
                                        {
                                            D0010Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(METER_READ_DATE.METER_READ_DATE.Trim()));

                                        }
                                        else
                                        {
                                            D0071Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(SETTLEMENT_DATE_REGI.SETTLEMENT_DATE_REGI.Trim()));

                                        }
                                    }
                                    else
                                    {
                                        D0010Send(RegID, Convert.ToString(MPAN.MPAN.Trim()), Convert.ToString(ROLECODE.ROLECODE.Trim()), Convert.ToString(TARIFFTYPE.TariffType.Trim()), Convert.ToInt32(NORMAL_METER_READ.NORMAL_METER_READ), Convert.ToInt32(LOW_METER_READ.LOW_METER_READ), Convert.ToString(METER_READ_DATE.METER_READ_DATE.Trim()));

                                    }
1 голос
/ 08 октября 2019

Если строки всегда в этом формате:

int yearStart = Convert.ToInt32(Meter_read_date.Substring(0, 4));
int monthStart = Convert.ToInt32(Meter_read_date.Substring(2, 2));
int dayStart = Convert.ToInt32(Meter_read_date.Substring(4,2));

DateTime startDate = new DateTime(yearStart, monthStart, dayStart);

//You could possibly skip the three lines of variables and put them directly in the startDate.
//Do the same for the other date and create a variable endDate.

Теперь вы можете использовать эту запись:

(endDate - startDate ).TotalDays
0 голосов
/ 08 октября 2019

Похоже, что вы пытаетесь вычесть строку из даты. Если METER_READ_DATE всегда создается как строка в этом формате, вы должны иметь возможность проанализировать ее, а затем сравнить с другой строкой, когда она также анализируется.

//RequestMeterRead(RegID);
if (DateTime.Parse(METER_READ_DATE).Day - DateTime.Parse(SETTLEMENT_DATE_REGI).Day < 5)
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...