2013-03-22 6 views
18

Suche Noda Zeit für eine ziemlich einfache Anwendung zu verwenden, jedoch bin ich kämpfen, alle Unterlagen zu finden, einen sehr einfachen Anwendungsfall zu behandeln:mit Noda Zeit Getting Started

ich eine angemeldeten Benutzer habe, und werde Speichern Sie ihre bevorzugte Zeitzone in den Einstellungen. Irgendwelche Datum/Zeiten, die von dem Client kommen, kommen in einem bekannten Textformat (z. B. "TT/MM/JJJJ HH: mm") mit einer bekannten Zeitzonen-ID (z. B. "Europa/London"). Ich plante, diese Zeiten in UTC/Noda Instants zu konvertieren, um zu verhindern, dass die Zeitzoneninformationen mit jedem Datum in der Datenbank gespeichert werden müssen.

Erstens klingt das wie ein vernünftiger Ansatz? Ich bin frei, so ziemlich alles zu ändern, also würde ich mich freuen, auf einem besseren/vernünftigeren Kurs zu sein. Die Datenbank ist MongoDb und verwendet den C# -Treiber.

Was ich versucht habe, ist in diese Richtung, aber kämpfen, um über den ersten Schritt zu kommen!

var userSubmittedDateTimeString = "2013/05/09 10:45"; 
var userFormat = "yyyy/MM/dd HH:mm"; 
var userTimeZone = "Europe/London"; 

//noda code here to convert to UTC 


//Then back again: 

Ich kenne jemanden fragen: „Was haben Sie versucht“, zu dem alles, was ich verschiedene failed Konvertierungen. Gerne auf eine "Erste Schritte mit Noda Zeit" -Seite hingewiesen werden!

+0

Haben Sie http://noda-time.googlecode.com/hg-history/1.0.x/docs/userguide/index.html gesehen? –

+0

Ja, durch so ziemlich jede Seite. Ich verstehe die Kernprinzipien, ich versuche nur herauszufinden, wie Sie es in der Praxis anwenden. Die einzigen Codebeispiele, die ich gesehen habe, waren Komponententests ... –

+0

Die relevantesten Seiten sind wahrscheinlich die Texthandling- und die Zeitzonenabschnitte der Kernkonzepte. Und die API-Dokumentation natürlich. Aber wenn Sie etwas spezifisch vorschlagen können, um mehr Inhalt hinzuzufügen, wäre das großartig. Mehr Beispielcode wäre auf jeden Fall nützlich - aber es ist ein Fall von was zu wählen. Hmm. –

Antwort

21

Ich wollte diese Zeiten in UTC/Noda Instants konvertieren, um zu verhindern, dass alle Zeitzoneninformationen mit jedem Datum in der Datenbank gespeichert werden müssen.

Das ist in Ordnung, wenn Sie nicht wissen müssen, um später auf die ursprüngliche Zeitzone. (z. B. wenn der Benutzer die Zeitzone ändert, aber immer noch etwas in der ursprünglichen Zeitzone auftreten möchte).

Wie dem auch sei, ich würde das auszusondern in drei Schritten:

  • in eine Parsing LocalDateTime
  • dass Konvertieren in ein ZonedDateTime
  • dass Konvertieren in ein Instant

So etwas wie:

// TODO: Are you sure it *will* be in the invariant culture? No funky date 
// separators? 
// Note that if all users have the same pattern, you can make this a private 
// static readonly field somewhere 
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy/MM/dd HH:mm"); 

var parseResult = pattern.Parse(userSubmittedDateTimeString); 
if (!parseResult.Success) 
{ 
    // throw an exception or whatever you want to do 
} 

var localDateTime = parseResult.Value; 

var timeZone = DateTimeZoneProviders.Tzdb[userTimeZone]; 

// TODO: Consider how you want to handle ambiguous or "skipped" local date/time 
// values. For example, you might want InZoneStrictly, or provide your own custom 
// handler to InZone. 
var zonedDateTime = localDateTime.InZoneLeniently(timeZone); 

var instant = zonedDateTime.ToInstant(); 
+1

Hallo Jon, Dies ist genau der Code, den ich gesucht habe. Ich bin so weit gekommen, ein Muster zu erstellen, aber ich habe nicht erkannt, dass das Muster die Methode Parse enthält. Sucht nach dem Objekt "ZonedDateTime". Ich werde das ausprobieren, vielen Dank für die Hilfe. –

+1

@PaulGrimshaw: Richtig - wir haben die Parse (und TryParse) Methoden aus LocalDateTime entfernt, weil es nicht annähernd so schön war, als wenn man sie nur in den Pattern Typen hatte. Zögern Sie nicht, andere Fragen zu stellen - je mehr Nutzer von Noda Time, desto besser :) –

+6

Ich möchte hinzufügen, dass ich viel glücklicher bin mit einer Bibliothek, die sehr streng ist und Sie dazu bringt, diese Dinge durchzudenken, als die Date-Time-Library, die die Systemzeit in unvorhersehbaren Momenten zu verwenden scheint.Alles Noda Zeit braucht meiner Meinung nach ein bisschen eine "Erste Schritte" Anleitung, mit echten Grundlagen wie oben. –

Verwandte Themen