[.NET] DateTime, UTC, GMT, ...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 21:51

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
Op zoek naar de oorzaak van een tijdsprobleem (ik heb er op zich wel genoeg, daar niet van), kwam ik op deze pagina terecht:
Let's look at some code that doesn't work:

Visual Basic:
1
2
3
Dim d As DateTime
d = DateTime.Parse("Dec 03, 2003 12:00:00 PM") 'date assignment
d.ToUniversalTime()


The program above takes the value in variable d and saves it to a database, expecting the stored value to represent a UCT view of time. This example recognizes that the Parse method renders the result in local time unless some non-default culture is used as an optional argument to the Parse family of methods.

Fixing the code sample is easy:
Visual Basic:
1
2
Dim d As DateTime
d = DateTime.Parse("Dec 03, 2003 12:00:00 PM").ToUniversalTime()
Ik probeer te begrijpen waarom de 2 stukken code verschillend zouden zijn. Ik heb de tekst een paar keer doorgelezen, maar volgens mij zie ik iets simpels over het hoofd.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 14:12
Dat staat toch in rule #4? Of heb ik het nu mis?

Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14:15
Zo zou het wel moeten werken:
Visual Basic:
1
2
3
Dim d As DateTime 
d = DateTime.Parse("Dec 03, 2003 12:00:00 PM") 'date assignment 
d = d.ToUniversalTime()


De functies passen namelijk de instantie waarop de functie wordt uitgevoerd niet aan, maar geven het resultaat als nieuwe instantie terug.

Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 13-07 01:53

Korben

() => {};

Nee, het verschil zit hem in het feit dat DateTime een value-type is en as such, immutable (dat wil zeggen, het object zelf kan niet worden gewijzigd).

In voorbeeld 1 wordt dus een waarde aan d toegekend. De aanroep naar ToUniversalTime verandert niets aan de waarde van d, maar geeft een nieuwe DateTime terug met de gecorrigeerde waarde. Daar wordt vervolgens nik mee gedaan, in tegenstelling tot bij voorbeeld 2, waar de uiteindelijke waarde wordt toegekend aan d.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 21:51

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
Amras en Korben zeggen eigenlijk hetzelfde, en dat zal me leren om de documentatie van ToUniversalTime niet te lezen. Door de opzet van codeblock 1 ging ik ervan uit dat die functie de struct aanpaste, maar hij geeft inderdaad gewoon een nieuwe struct terug.

Daar komt nog bij dat wanneer je de tekst leest, dit in mijn ogen helemaal niet aangegeven wordt. Het gaat enkel over local time en culture, terwijl daar het verschil niet in zit tussen die 2 codeblocks, toch?

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14:15
GrimaceODespair schreef op zaterdag 17 juli 2010 @ 00:29:
Amras en Korben zeggen eigenlijk hetzelfde, en dat zal me leren om de documentatie van ToUniversalTime niet te lezen. Door de opzet van codeblock 1 ging ik ervan uit dat die functie de struct aanpaste, maar hij geeft inderdaad gewoon een nieuwe struct terug.

Daar komt nog bij dat wanneer je de tekst leest, dit in mijn ogen helemaal niet aangegeven wordt. Het gaat enkel over local time en culture, terwijl daar het verschil niet in zit tussen die 2 codeblocks, toch?
De reden dat het niet in de documentatie staat, is dat het standaard gedrag is als je met een value-type werkt. Het is dus niet iets unieks voor deze functie, maar het gevolg van het feit dat je met een DateTime werkt. Voor overige value-types zul je hetzelfde gedrag zien.
Pagina: 1