Програма по софтуерно инженерство
Loading...
Hristo_Penchev avatar Hristo_Penchev 388 Точки

Част от денонощието в принтиране на час

Работя над Exam Schedule. Излъгах го да вади часа в 12 часов формат, но не иска да ми изписва AM/PM.

Принтя със следния формат:

Console.WriteLine("{0:hh:mm tt}",startTime);

 

Изписва ми часа, но не и дали е преди или следобяд.

Тагове:
Hristo_Penchev avatar Hristo_Penchev 388 Точки

Ето целият код:

http://pastebin.com/AG4DcWL2

 

startTime е декларана в DateTime тип, така че не виждам къде е проблемът.

Благодаря предварително!

0
quickben avatar quickben 973 Точки

Обек от тип DateTime e обект от "непроменлив" тип или на Английски език "immutable type" сиреч веднъж деклариран и инициализиран обект от този тип не може да бъде променян, просто стойноста на обекта може да бъде използвана за създаване на друг обект от съвместим тип.

Примерно ако направим един стринг string myName = "Zoro"; и искаме да променим стойноста на тази променлива(името) трябва да създадем нов стринг. string myNewName = myname + "the Fox"; Прочети малко за stack и heap и ще ти стане малко по-ясно.  

А за конкректната задача мисля, че кода говори повече от хиляда думи :)

ЦЪК (можеше да бъде направена и по-добре, но мисля, че би трябвало да ти отговори на конкретния въпрос)

0
Hristo_Penchev avatar Hristo_Penchev 388 Точки
Не мисля, че те разбирам: startTime = startTime.AddHours(durationHours); startTime = startTime.AddMinutes(durationMinutes); С тези редове без проблем коригирам стойността на променлива от тим DateTime.
0
quickben avatar quickben 973 Точки

"С тези редове без проблем коригирам стойността на променлива от тип DateTime"

Много си прав :)

Прочети това което съм ти препоръчал и ще ти стане ясно това което имам предивд има го и във видео лекцийте.

startTime = startTime.AddHours(durationHours);

startTime = startTime.AddMinutes(durationMinutes); 

Тези два реда предполагат, че вече има създаден обект(променлива) от тип DateTime на име startTime.

Самите два реда променят стойноста на самия обект която се пази динамичната памет(heap) а не самото име на променливата което се пази в stack-a, реално името на променливата е pointer(указател) към мястото в паметта в което се пази самата стойност на тази променлива.

Пич направи ми обект от тип DateTime с име StartTime и му задай тази стойност като заделиш място в паметта за него. 

DateTime startTime = new DateTime(стойност);

startTime = startTime.AddHours(durationHours);

Пич на този обект му добави часовете.

startTime = startTime.AddMinutes(durationMinutes); 

Пич на този обект му добави минути.

И да реално на пръв поглед ти се струва така, че стойноста на обекта е променена но в реалност е променен само адреса към паметта към който сочи името на променливата(затова казах,че името е само указател към мястото в паметта където се пази стойноста на обекта а не името му) 

Както казах прочети относно това как даден тип променливи се репрезенират в паметта на компютъра и ще ти стане много по-ясно :)

 тази тема би ти отговорила най-правилно на конкретния въпрос

0