Just nu i M3-nätverket
Gå till innehåll

Veckodagar


tp640871

Rekommendera Poster

Hej, jag jobbar med en kompis på ett spel, men har ett litet problem.

 

Jag har tre variabler som skallas Day, Month och Year.

 

Jag vill att spelet ska kunna lista ut veckodagar genom dessa tre variabler och exportera svaret till en String-variabel som heter Veckodag. Går detta?

 

Visst kan man ha

 

if year = 2004 then if month = 1 then if day = 1 then Veckodag := 'Måndag';

if year = 2004 then if month = 1 then if day = 2 then Veckodag := 'Tisdag';

if year = 2004 then if month = 1 then if day = 3 then Veckodag := 'Onsdag';

o.s.v...

 

Men det kommer ju att ta åratal!

 

Finns det något lätt sätt att göra detta? Det ska fungera för alla dagar i alla månader år 2004 - år 2006, och även fatta att 2004 är ett skottår.

 

Hälsningar

Marcus N

[inlägget ändrat 2004-10-01 16:04:47 av tp640871]

Länk till kommentar
Dela på andra webbplatser

Man brukar ta och räkna ut hur många dagar det har gått från, i ditt fall, 1 januari 2004, och sen tar man antalet dagar modulo 7 och därifrån kan man lätt se vilken veckodag det blir när man vet vilken veckodag den 1 januari 2004 var.

 

Länk till kommentar
Dela på andra webbplatser

Jag tror att jag fattar, men du kan inte ge något exempel på detta i kodform? Nu har jag även en integer-variabel som heter TotaltAntalDagar där det alltid står hur många dagar som gått.

 

Tacksam för ett kod-exempel!

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag aldrig programmerat i Delphi och skall ni kunna få ihop ett spel borde väl inte det här vara så svårt. Men här är lite C-lik pseudo-kod

 

TotaltAntalDagar = 0
for (i := 2004; i < Year; i = i + 1)
 for (j := 1; j < 12; j = j + 1)
   if i == Year and j == Month    // We reached the wanted year and month
     TotaltAntalDagar = TotaltAntalDagar + Day
      break    // End both for-loops we are finished
   // else add number of days in Month to TotaltAntalDagar
   if j == 2
     if i == 2004
        DaysInMonth = 29
     else DaysInMonth = 28
   else if j = 4 or 6 or 8 or 11
      DaysInMonth = 30
   else DaysInMonth = 31
   TotaltAntalDagar = TotaltAntalDagar + DaysInMonth
 end // Continue with next month
end // Continue with next year

// Calculate number of whole weeks
Weeks = TotaltAntalDagar / 7        // Obs, heltalsdivision
// And how many days in the last week
Weekday = TotaltAntalDagar - (Weeks * 7)

Och nu får ni räkna om ett tal som är mellan 0 och 6 till rätt veckodag på alldeles egen hand, typ liknande ert första inlägg ovan.

 

 

Länk till kommentar
Dela på andra webbplatser

:) Tack! Det skulle jag aldrig kommit på själv...

 

STORT TACK FÖR ALL HJÄLP JAG FÅTT!

 

Hälsningar

Marcus

 

Länk till kommentar
Dela på andra webbplatser

Kolla gärna på Delphis inbygda Date/Time rutiner....

 

Ditt problem kan lösas på 2 rader...

 

Date:=EncodeDate(Year, Month, Day); //Ta reda på datumet i TDateTime-format

Veckodag:=DayOfWeek(Date); //Ta reda på vilken dag i veckan

 

//Andreas

 

[inlägget ändrat 2004-10-06 13:50:21 av RedOctober]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...