[C#] string.Format() en een TimeSpan

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Volgens mij doe ik iets fout in mijn code, waar ik een TimeSpan in een string probeer om te zetten. Zie hier mijn code alvast:
C#:
1
string.Format("{0:h:mm:ss}", new TimeSpan(0, 0, 0, 0, (int) remaining));

Die remaining is een waarde in 100-nanosecondes, dus dat zit goed. Ik heb ook in het Immediate windowtje gekeken, en de TimeSpan krijgt hiermee echt de juiste properties, dus Hours, Minutes, Seconds, enz.

Het probleem zit em dan ook in de output. Je zou 3:45:10 verwachten, maar er komt 03:45:10.34200000 uit. Toch als ik naar de help van TimeSpan.ToString kijk, zie ik dat de format string wel correct is, dus wat doe ik dan fout :?

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:58
Tiens, idd vreemd. Normaal gezien zouden die fracties van seconden maar mogen getoond worden, als je ook de ff formatter gebruikt.
Een bugje misschien ?

https://fgheysels.github.io/


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Ik zat sowieso scheel te kijken, TimeSpan.ToString heeft geen overload met een formatter string :)

Maar dat neemt niet weg dat dit best zou mogen werken... het standard format van een TimeSpan is misschien niet de gewenste. Maargoed, uiteindelijk heb ik het maar zo opgelost:
C#:
1
Regex.Replace(new TimeSpan(0, 0, 0, 0, remaining).ToString(), "\\..*$", "");

Dus de standaard formatter erop loslaten en dan alles vanaf de punt verwijderen met een regex. Ik begrijp overigens niet waarom dit niet een komma is (omdat mijn culture op NL staat), maar dat terzijde. Een beetje slordige oplossing dus, maar it does the trick.

[ Voor 13% gewijzigd door _Thanatos_ op 12-02-2006 22:59 ]

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:58
Is string.Format wel culture independent ? Je geeft nl. zelf het formaat op dat je wenst.
IMHO is het vergelijkbaar met dit
code:
1
aDate.ToString ("dd-MM-yyyy");

Als je culture settings nu zeggen dat je datums in formaat maand/dag/jaar moeten zijn, dan zal die aDate toch in dag/maand/jaar geoutput worden.

https://fgheysels.github.io/


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Topicstarter
Bij mijn weten pakken zowel string.Format als object.ToString beide de CurrentCulture... Tenzij je natuurlijk een IFormatProvider meegeeft (in praktijk een culture dus)

[ Voor 32% gewijzigd door _Thanatos_ op 12-02-2006 23:04 ]

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:58
Idd, ik dacht ff dat string.Format geen overload had waar je een IFormatProvider kon aan meegeven, maar ik heb niet goed gekeken.

https://fgheysels.github.io/


  • FTL
  • Registratie: Maart 2000
  • Laatst online: 09:50

FTL

Je kan natuurlijk de remaining ook zelf in de seconds zetten, scheel weer een RegExp.

string.Format("{0:h:mm:ss}", new TimeSpan(0, 0, 0, (int) remaining/1000, 0));
Pagina: 1