Toon posts:

[C#] Seconden naar tijdstring?

Pagina: 1
Acties:
  • 658 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben in CSharp met muziek bezig en daarvan wil ik de speeltijd aftellen. Ik krijg een aantal seconden, die ik naar een correcte tijd string wil zetten. Bijvoorbeeld, 320 seconden is dan iets van 00:05:20

Dat is verder ook geen probleem, maar bij het aftellen gaat het fout. De code die ik gebruikte heb ik even iets uit elkaar getrokken om het duidelijker te weergeven, maar ziet er dus zo uit:

// Bass is de module waar ik gebruik van maak en hiermee zet ik de lengte van het nummer in bytes om naar seconden.
float lengte = (long)Bass.BASS_ChannelBytes2Seconds(handle, (long)Bass.BASS_StreamGetLength(handle));

// Hier zet ik de bytes van de positie om in seconden.
float positie = (long)Bass.BASS_ChannelBytes2Seconds(handle, Bass.BASS_ChannelGetPosition(handle));

// Hier bereken hoeveel seconden er nog over zijn.
int countdown = (int)lengte - (int)positie;

mijn probleem is nu, hoe zet ik dit om naar een tijdstring, ik gebruikte dit:
float hour = (countdown / 3600) % 24;
float sec = countdown % 60;
float min = (countdown / 60) % 60;

En dan met string.Format() omzetten naar een goede tijdstring.

Dit werkte niet, want zodra ie af begon te tellen ging ie van 00:05:00 naar 00:05:59 in plaats van 00:04:59.

Iemand een idee hoe ik dit anders kan doen? Ik denk dat er ergens iets misgaat met de afronding, maar daar ben ik niet zeker van.

  • guanpedro
  • Registratie: Maart 2002
  • Laatst online: 31-10 23:58

guanpedro

Live forever or die trying

Als het om tijd en aftellen gaat waarom gebruik je dan niet TimeSpan en Timer objecten?

PC: MSI-NEO2FISR P4-2.6HT@2.8 Dual-channel GEIL-PC3500 Intel CSA GB-LAN 9600PRO Pioneer DVR106 Server: Dual Xeon-2GHz 3Ware 7500-12 11x120GB RAID5 GB-LAN RH 9 2.4.22 Digicam: Sony DSC-F717


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sja, de tijd omzetten is natuurlijk altijd nog met de triviale oplossing mogelijk:
int uren = floor(countdown / 3600);
int rest = countdown - (uren * 3600);
int minuten = floor(rest / 60);
int seconden = rest - (minuten * 60);

[ Voor 10% gewijzigd door ACM op 15-04-2005 15:33 ]


  • Sijmen
  • Registratie: November 2004
  • Laatst online: 01-10 13:44
code:
1
2
TimeSpan ts = new TimeSpan(seconds * TimeSpan.TicksPerSecond);
string tehstring = ts.ToString("hh:mm:ss");


Misschien heb je daar wat aan?

Verwijderd

Topicstarter
ACM schreef op vrijdag 15 april 2005 @ 15:32:
Sja, de tijd omzetten is natuurlijk altijd nog met de triviale oplossing mogelijk:
int uren = floor(countdown / 3600);
int rest = countdown - (uren * 3600);
int minuten = floor(rest / 60);
rest = rest - minuten * 60;
int seconden = rest /
Math.Floor() ;)

Maar werkt perfect, dank je! Dit zou ik geweten moeten hebben |:(

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Of met modulo:

C#:
1
2
3
int hours   = (int) Math.Floor(time /3600);
int minutes = (int) Math.Floor((time %3600) /60);
int seconds = (int) Math.Floor((time %3600) %60);

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1