Профил
Loading...
+ Нов въпрос
Hristo_Penchev avatar Hristo_Penchev 388 Точки

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

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

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

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

 

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

Тагове:
Filkolev avatar Filkolev 4501 Точки

Пробвай така:

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

Най-добре си качи някъде целия код, за да може който има желание да ти помогне да си го пусне във Visual Studio и да дебъгва. В момента не съм сигурен дали моята препоръка въобще ще се компилира. 

0
HPetrov avatar HPetrov 822 Точки

startTime трябва да ти е DateTime тип :)

0
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
mihayloff14 avatar mihayloff14 825 Точки

Здравей,

Имах абсолютно същия проблем. За да оправиш това, трябва да смениш CultureInfo на "en-US":

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

Имай предвид, че трябва да вмъкнеш няколко библиотеки, за да може да използваш този метод. smile

using System.Threading;
using System.Globalization;

3
Hristo_Penchev avatar Hristo_Penchev 388 Точки
Стана, благодаря ти!
0
Filkolev avatar Filkolev 4501 Точки

Ами при мен работи, ето входа и съотвено изхода на последния ред:

4
30
AM
2
30
07:00 AM

Ако се промени накрая форматирането на стринга по начина, който посочих, изходът съвпада с очакваното на 100% (ако правилно помня какво се искаше в задачата).

Не знам дали не става дума за регионални настройки, но същият код при мен показва част от деня, не виждам причина при теб да не излиза.

1
Hristo_Penchev avatar Hristo_Penchev 388 Точки

Може и да са настройките, при мен твоят вариант просто сложи още две точки след минутите.

0
Hristo_Penchev avatar Hristo_Penchev 388 Точки

Като сложих американска култура и твоят вариант проработи. Даже е по-правилен, понеже условието изисква двуеточие и след минутите.

0
quickben avatar quickben 973 Точки
Проблема идва от разликата във формата на входните и изходните данни. "h:m tt" прощава повече от "hh:mm:tt" :) Първия формат приема както двуцифрени числа така и едноцифрени числа докато втория формат изисква задължително двуцифрено число за час и двуцифрено число за минути, както е демонстрирано в по-горния ми коментар.
1