Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

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

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

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

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

 

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

Тагове:
0
Programming Basics
Filkolev avatar Filkolev 4482 Точки

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

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

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

0
HPetrov avatar HPetrov 822 Точки

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

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

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

http://pastebin.com/AG4DcWL2

 

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

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

0
quickben avatar quickben 966 Точки

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

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

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

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

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

"С тези редове без проблем коригирам стойността на променлива от тип 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 824 Точки

Здравей,

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

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

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

using System.Threading;
using System.Globalization;

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

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

4
30
AM
2
30
07:00 AM

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

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

1
Hristo_Penchev avatar Hristo_Penchev 389 Точки

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

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

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

0
quickben avatar quickben 966 Точки
Проблема идва от разликата във формата на входните и изходните данни. "h:m tt" прощава повече от "hh:mm:tt" :) Първия формат приема както двуцифрени числа така и едноцифрени числа докато втория формат изисква задължително двуцифрено число за час и двуцифрено число за минути, както е демонстрирано в по-горния ми коментар.
1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.