пятля DateTime ў C #

Верагодна, крыху пятнічных цяжка думаць аб логіцы. Можа быць, гэта можа быць простая логіка.

Маё пытанне было Я ўчорашняе час даты. Я hourValue з 7,8,9 ... 23, 0,1,2,3,6.

DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1);    
DateTime todays_datetime = new DateTime();

У цыкле Hours мне трэба дадаць hourvalue у прыведзеным ніжэй кодзе.

todays_datetime = yesterday_datetime.AddHours(hourValue);

Але калі справа даходзіць да hourvalue 0 яна прымае ўчорашнюю дату толькі не сённяшняя дата.

Я дадаваў гадзіны з 7,8,9 ... 23,0,1,2,3,4,5,6 да 2013/05/30, так што калі 7 быў дададзены 2013/05/30 тады будзе 30/05/2013 07:00:00 і гэтак далей да 23 гэта было 2013/05/30 23:00:00. Зараз падыходзіць да 0..6 павінна быць 31/05/2013 00:00:00 і 31/05/2013 01:00:00 і гэтак далей

Я прапускаю тут што-небудзь? Любая дапамога будзе ацэнена.

ура

2
@ User1990395 Не, калі вы дадаеце 23 гадзіны ўчора, вы амаль напэўна сёння.
дададзена аўтар DonBoitnott, крыніца
На жаль, гэтае пытанне ставіцца без «чаму» кампаненты. Вось чаму вы атрымліваеце адказы, якія паўсюль. Вызначыць «што ў мяне ёсць» і «тое, што я хачу ад яго», і вы атрымаеце да кропкі хутчэй.
дададзена аўтар DonBoitnott, крыніца
разыходзяцца ў меркаванні наконт першай лініі + першага прапановы.
дададзена аўтар Freelancer, крыніца
Не ўпэўнены Ці я атрымліваю вас правільна, але yesterday_datetime.AddHours (0) на самой справе да гэтага часу yesterday_datetime .
дададзена аўтар Matthias Meid, крыніца
Не маглі б вы, магчыма, дадаць прыклад высновы разам з інфармацыяй, што вы маглі б чакаць. Што б зрабіць яго лягчэй знайсці пытанне тут.
дададзена аўтар Jan Thomä, крыніца
@Freelancer добра я не супраць
дададзена аўтар user1990395, крыніца
@MatthiasMeid так, але я дадаю ад 7 ... 23, 0 направа так, пры даданні 23 да цяперашняга часу ўчора, а затым дадаць 0 павінна быць сённяшнімі дата right..Imagine гадзін у цыкле ад 7 .... 23, 0,1,2,3,4,5,6
дададзена аўтар user1990395, крыніца
@corak Я ведаю, але пры даданні 23, то даданне 0 павінна быць сённяшняй дата правільна? Уявіце hourvalue з (7,8,9 ... 23, 0,1,2,3,4,5,6) і завесы будуць пачынаць з 7 і заканчваюцца 6
дададзена аўтар user1990395, крыніца
@Corak я дадаваў гадзіны з 7,8,9 ... 23,0,1,2,3,4,5,6 да 2013/05/30, так што калі 7 быў дададзены 2013/05/30 тады будзе быць 2013/05/30 07:00:00 і гэтак далей да 23 гэта было 2013/05/30 23:00:00. Зараз падыходзіць да 0..6 павінна быць 31/05/2013 00:00:00 і 01:00:00 31/05/2013
дададзена аўтар user1990395, крыніца
Вы можаце паказаць свой цыкл? Ваша пытанне здаецца расплывістым
дададзена аўтар V4Vendetta, крыніца
Не ўпэўнены, што вы спрабуеце зрабіць ... можа быць, гэта у той час як (учора <�сёння) {ўчора = yesterday.AddHours (1); } ці проста сёння = yesterday.AddHours (hourValue == 0 24: hourValue); будзе рабіць тое, што вы хочаце. У залежнасці ад таго, які логікі вы хочаце дасягнуць.
дададзена аўтар Corak, крыніца
Няма! вы дадаеце <�я> нулявы гадзін да ўчорашняга дня. Вядома, гэта ўсё яшчэ будзе ўчора!
дададзена аўтар Corak, крыніца
Акрамя выпадкаў, калі вы робіце гэта ад паўночы да 1 гадзіны ночы. Значэнне, вы, верагодна, атрымаеце дату сённяшняй , але вы заўсёды будзеце адну гадзіну назад.
дададзена аўтар Corak, крыніца
Ой, прабачце, прапусціў .Date . Так, так што не. <�Код> DateTime.Now.Date.AddDays (-1) .AddHours (0); будзе <�я> заўсёды </я> быць ўчора апоўначы. Як я ўжо сказаў, я не ведаю, што вы хочаце зрабіць, але працаваць з hourValue проста здаецца няправільным. Можа быць, вы хочаце, каб зрабіць крок назад і паглядзець на тое, што вы робіце. Вы хочаце дадаць <�я> нулявы ч (г.зн. <�я> нічога </я>), каб учора ў поўнач, і чакаць, што яна будзе сёння апоўначы.
дададзена аўтар Corak, крыніца
Калі вы хочаце Hour 0 быць сёння чаму б не проста выкарыстоўваць, калі заява, праверце 0 і скінуць да 24? Тады ваш AddHours будзе штурхаць дату на сёння.
дададзена аўтар rie819, крыніца

7 адказы

Калі вы зрабілі Somthing як

var now = DateTime.Now
for (var time = now.AddDays(-1); time < now; time = time.AddHours(1))
{
   //time enumerates the hours between yesterday and now.
}

ён павінен працаваць нармальна.


або, калі вы не любіце пятлю,

var yesterday = DateTime.Now.AddDays(-1);
var hourTimes = Enumerable.Range(0, 24)
    .Select(hourValue => yesterday.Add(hourValue));
2
дададзена

Я не мог у поўнай меры зразумець праблему: Калі ў вас ёсць hourValue 0 і дадаць іх да ўчорашняга DateTime, што значэнне не зменіцца. Дакладна?

1
дададзена
Добра, калі меркаваць па гэтым пытанні, гэта правільны адказ. Я проста мяркуючы, што пытанні з'яўляецца mispresented.
дададзена аўтар Jodrell, крыніца

Я думаю, што я пачынаю разумець. Паспрабуйце гэта:

for (Int32 i = -24; i <= 23; i++)
{
    DateTime dt = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.AddHours(i).Day, DateTime.Now.AddHours(i).Hour, DateTime.Now.AddHours(i).Minute, DateTime.Now.AddHours(i).Second);
    Console.writeLine(dt.ToString());
}

Прама цяпер, у ЗША EST я атрымліваю:

5/30/2013 7:52:06 AM
5/30/2013 8:52:06 AM
5/30/2013 9:52:06 AM
5/30/2013 10:52:06 AM
5/30/2013 11:52:06 AM
5/30/2013 12:52:06 PM
5/30/2013 1:52:06 PM
5/30/2013 2:52:06 PM
5/30/2013 3:52:06 PM
5/30/2013 4:52:06 PM
5/30/2013 5:52:06 PM
5/30/2013 6:52:06 PM
5/30/2013 7:52:06 PM
5/30/2013 8:52:06 PM
5/30/2013 9:52:06 PM
5/30/2013 10:52:06 PM
5/30/2013 11:52:06 PM
5/30/2013 12:52:06 AM
5/30/2013 1:52:06 AM
5/30/2013 2:52:06 AM
5/30/2013 3:52:06 AM
5/30/2013 4:52:06 AM
5/30/2013 5:52:06 AM
5/30/2013 6:52:06 AM
5/31/2013 7:52:06 AM
5/31/2013 8:52:06 AM
5/31/2013 9:52:06 AM
5/31/2013 10:52:06 AM
5/31/2013 11:52:06 AM
5/31/2013 12:52:06 PM
5/31/2013 1:52:06 PM
5/31/2013 2:52:06 PM
5/31/2013 3:52:06 PM
5/31/2013 4:52:06 PM
5/31/2013 5:52:06 PM
5/31/2013 6:52:06 PM
5/31/2013 7:52:06 PM
5/31/2013 8:52:06 PM
5/31/2013 9:52:06 PM
5/31/2013 10:52:06 PM
5/31/2013 11:52:06 PM
5/31/2013 12:52:06 AM
5/31/2013 1:52:06 AM
5/31/2013 2:52:06 AM
5/31/2013 3:52:06 AM
5/31/2013 4:52:06 AM
5/31/2013 5:52:06 AM
5/31/2013 6:52:06 AM
0
дададзена

Я не ўпэўнены, калі вы хочаце, але вы маглі б паспрабаваць нешта накшталт:

while (yesterday_datetime <= todays_datetime)
{
   //some logic

    yesterday_datetime = yesterday_datetime.AddHours(hourValue);
}

Вы будзеце цыкл у DATETIME да yesterday_datetime атрымаць той жа DateTime з todays_datetime , гадзіну на hourValue . Вы павінны assegure ў hourValue ня 0.

0
дададзена
Паспрабую і вернецца
дададзена аўтар user1990395, крыніца

Калі магчыма ў вашым выпадку вы можаце проста выкарыстоўваць: hourValue: 7,8,9 ... 23,24,25,26,27,28.

0
дададзена

Вы павінны выправіць свае вартавыя значэння:

Вашы каштоўнасці ў цяперашні час:

7,8,9...23, 0,1,2,3,6.

Вашы каштоўнасці павінны быць:

7,8,9...23, 24, 25, ...

Інакш, калі вы тэлефануеце «AddHours (0)», гэта ўсё яшчэ учорашняя дата:

Console.WriteLine(
(yesterday_datetime.AddHours(0) == yesterday_datetime).ToString()
);

друкуе «True»

0
дададзена
todays_datetime = yesterday_datetime.AddHours(hourValue);

У сваім кодзе вы не абнавілі аб'ект yesterday_datetime. Ён па-ранейшаму паказвае на папярэдні дзень, нават пасля таго, як вы дадалі некалькі гадзін да яго. Вы павінны абнавіць yesterday_datetime прызначыць yesterday_datetime ў todays_datetime для першага і выкарыстання today_datetime для далейшага працэсу.

DateTime yesterday_datetime = DateTime.Now.Date.AddDays(-1);    
DateTime todays_datetime = yesterday_datetime ;
todays_datetime = todays_datetime .AddHours(hourValue);
0
дададзена
Затым todat_datetime дадасць гадзін, як 7 + 8 = 15, то 15 + 9 = 24 і сын
дададзена аўтар user1990395, крыніца
AddDays метад будзе ўсталяваць значэнне часу на нуль (гадзіны, хвіліны, секунды). Вынік будзе ўтрымліваць толькі інфармацыю пра дату.
дададзена аўтар petchirajan, крыніца