myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » StringFormat=d führt zu falschen Datum im ViewModel
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

StringFormat=d führt zu falschen Datum im ViewModel

 
Beiträge zu diesem Thema Autor Datum
 StringFormat=d führt zu falschen Datum im ViewModel JimStark 21.11.2020 18:48
 RE: StringFormat=d führt zu falschen Datum im ViewModel Gasimodo 21.11.2020 19:24
 RE: StringFormat=d führt zu falschen Datum im ViewModel JimStark 22.11.2020 15:45
 RE: StringFormat=d führt zu falschen Datum im ViewModel HansFred 21.11.2020 21:36
 RE: StringFormat=d führt zu falschen Datum im ViewModel MrSparkle 22.11.2020 18:54
 RE: StringFormat=d führt zu falschen Datum im ViewModel JimStark 23.11.2020 11:53

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
JimStark
myCSharp.de-Mitglied

avatar-1005.jpg


Dabei seit: 10.03.2020
Beiträge: 160
Entwicklungsumgebung: Visual Studio 6.0 Enterprise


JimStark ist offline

StringFormat=d führt zu falschen Datum im ViewModel

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

ich habe folgendes Problem:

C#-Code:
// ViewModel:
        private DateTimeOffset _Date;

        public DateTimeOffset Date
        {
            get { return _Date; }
            set { _Date = value;
                OnPropertyChanged(nameof(Date));
            }
        }

// WPF:
      <TextBox Text="{Binding Date, StringFormat=d}" />

Das Datum wird mir in der Textbox korrekt angezeigt (DD.MM.YYYY).
Wenn ich das nun ändere (03.01.2020 in 02.01.2020) und abspeichere, wird das Datum -1 Tag genommen (01.01.2020). Ich denke das liegt daran dass die Stunde standardmäßig Null ist und an der internen Konvertierung von DateTime in DateTimeOffset durch das StringFormat(?).

Entferne ich das StringFormat erscheint mir das Datum als z.B. "01.01.2018 22:00 +00:00". Wenn ich jetzt das Datum ändere und übernehme stimmt es.
Hat da jemand einen Tipp damit das trotzdem funktioniert? Also das ich das kurze Datumsformat behalten kann?
21.11.2020 18:48 Beiträge des Benutzers | zu Buddylist hinzufügen
Gasimodo Gasimodo ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.05.2019
Beiträge: 8


Gasimodo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn mich nun nicht alles täuscht dann wird da mit UTC gerechnet und die Textbox gibt dir dann Ortszeit an, deswegen die 2h Unterschied.
Könntest ja das Datum mit einer TimeZoneInfo abspeichern?!
21.11.2020 19:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
JimStark
myCSharp.de-Mitglied

avatar-1005.jpg


Dabei seit: 10.03.2020
Beiträge: 160
Entwicklungsumgebung: Visual Studio 6.0 Enterprise

Themenstarter Thema begonnen von JimStark

JimStark ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Gasimodo:
Wenn mich nun nicht alles täuscht dann wird da mit UTC gerechnet und die Textbox gibt dir dann Ortszeit an, deswegen die 2h Unterschied.

Ja genau daran lag es! Ich habe es jetzt über ein weiteres Feld im ViewModel gelöst anstelle des Convertes. Damit geht es. Danke euch beiden!

C#-Code:
        private DateTimeOffset _Date;

        public DateTimeOffset Date
        {
            get { return _Date; }
            set { _Date = value;
                OnPropertyChanged(nameof(Date));
            }
        }

        public DateTime DateLocal
        {
            get
            {
                return Date.UtcDateTime;
            }
            set
            {
                Date = DateTime.SpecifyKind(value, DateTimeKind.Utc);
            }
        }
22.11.2020 15:45 Beiträge des Benutzers | zu Buddylist hinzufügen
HansFred
myCSharp.de-Mitglied

Dabei seit: 19.10.2020
Beiträge: 47


HansFred ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

es ist richtig das du mit DateTimeOffset arbeitest was in .NET empfohlen ist aber die umwandlung in die aktuelle timezone muss im viewmodel selbst gemacht werde.
in wpf kannst du dazu einen eigenen converter schreiben und zum binden verwenden der das dann automatisch macht!

Code:
1:
2:
3:
4:
5:
<Window.Resources>
  <local:DateTimeOffsetToLocalConverter x:Key="DateTimeOffsetToLocalConverter" />
</Window.Resources>

<TextBlock Text="{Binding Date, Converter={StaticResource DateTimeOffsetToLocalConverter}}" />
21.11.2020 21:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.571
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Niemand würde für ein Datumsfeld eine TextBox verwenden, dafür gibt es den  DatePicker
22.11.2020 18:54 Beiträge des Benutzers | zu Buddylist hinzufügen
JimStark
myCSharp.de-Mitglied

avatar-1005.jpg


Dabei seit: 10.03.2020
Beiträge: 160
Entwicklungsumgebung: Visual Studio 6.0 Enterprise

Themenstarter Thema begonnen von JimStark

JimStark ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, der braucht aber auch ein DateTime. Mit dem extra Feld geht es jetzt.
23.11.2020 11:53 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 05.12.2020 07:32