• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z konwersją stringa na obiekt DateTime- aplikacja pisana na systemach, które mają 2 różne języki.

0 głosów
1,273 wizyt
pytanie zadane 31 października 2015 w C# i .NET przez Surykat Pasjonat (15,000 p.)

Cześć. Piszemy ze znajomymi czytnik RSS. Od wydawcy RSS pobieramy informacje, min. datę publikacji artykułu. Data ta jest zapisana w formacie angielskim, jako string. Przykładowa data, którą mam w bazie: "Sat, 31 Oct 15 16:37:00 +0100"

Funkcja do podmiany daty wygląda tak:

        private void ChangePublicationDate()
        {
            DateTime dt;
            dt = Convert.ToDateTime(currentArticles[iterator].PublicationDate);
            PublicationDate.Content = dt.ToLongDateString() + ", " + dt.ToShortTimeString();
        }

Konwertuję to do Date Time, ponieważ kiedy to znów na stringa przekonwertuje, ładnie się to wyświelta. U mnie ta konwersja (na obiekt DateTime) działa (na angielskim systemie), u koleżanki, na polskim systemie wypluwa wyjątek z takim info:

"Ciąg nie został rozpoznany jako prawidłowy element DateTime, ponieważ wartość dnia tygodnia była nieprawidłowa."

Da się to jakoś ujednolicić?

Druga sprawa, już marginalna- jak to jest, że u mnie, na angielskim systemie, z angielskim formatem daty w bazie, dni tygodnia i miesiąca w odpalonym programie, wyświetlają się w języku polskim? Skąd komputer to wie? :)

1 odpowiedź

+1 głos
odpowiedź 1 listopada 2015 przez drek Gaduła (4,980 p.)
wybrane 3 listopada 2015 przez Surykat
 
Najlepsza

Nie wiem czy znacząco Ci pomoże, ale możesz podać "kulturę" która ma być użyta podczas konwersji:

Convert.ToDateTime Method (String, IFormatProvider)

https://msdn.microsoft.com/en-us/library/9xk1h71t%28v=vs.110%29.aspx

np:

dt = Convert.ToDateTime(currentArticles[iterator].PublicationDate, CultureInfo.GetCultureInfo("EN-GB") );

lub

dt = Convert.ToDateTime(currentArticles[iterator].PublicationDate, CultureInfo.GetCultureInfo("EN") );

 

w zależności od tego jakiej "kultury" chcesz użyć. Tutaj masz listę wspieranych "kultur":

https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx

Domyślnie na każdym systemie jest używana inna "kultura". Możesz sprawdzić jaka jest "kultura" na danym systemie przez:

CultureInfo.CurrentCulture

 

Tak z innej beczki. Generalnie użyty przez Ciebie format nieco mnie razi ponieważ dla mnie jest nieczytelny (to jest oczywiscie subiektywne odczucie, bo np dla Ciebie może być doskonale czytelny). Jeśli strefa czasowa nie jest dla Ciebie chiper istotna to ja bym np w ten sposób konwertował Datetime na string:

var dtString = string.Format("{0:yyyy-MM-dd HH:mm:ss.fffffff}", DateTime.Now)

Natomiast do konwersji ze stringu do Datetime bym użył następującej funkcji

var parsedDt = DateTime.ParseExact (dtStr, @"yyyy-MM-dd HH\:mm\:ss\.fffffff", CultureInfo.InvariantCulture);

 

Reasumując ja bym podszedł do tego w ten sposób. Poniżej zmienna "eq" powinna na każdym systemie zwrócić "true"

var dt = DateTime.Now;
var dtStr = string.Format ("{0:yyyy-MM-dd HH:mm:ss.fffffff}", dt);
var parsedDt = DateTime.ParseExact (dtStr, @"yyyy-MM-dd HH\:mm\:ss\.fffffff", CultureInfo.InvariantCulture);
var eq = dt == parsedDt;

Oczywiście moje podejście zawiera tę wadę, że zaniedbuję tutaj strefę czasową, ale w dużej części przypadków nie jest ona istotna.

komentarz 3 listopada 2015 przez Surykat Pasjonat (15,000 p.)
Dziękuję, gra i buczy. :)

Podobne pytania

0 głosów
1 odpowiedź 76 wizyt
pytanie zadane 21 września 2018 w C# i .NET przez seba Dyskutant (8,770 p.)
0 głosów
1 odpowiedź 788 wizyt
pytanie zadane 6 czerwca 2017 w C# i .NET przez michal Mądrala (5,200 p.)
0 głosów
2 odpowiedzi 115 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

65,684 zapytań

112,322 odpowiedzi

237,049 komentarzy

46,658 pasjonatów

Przeglądających: 257
Pasjonatów: 12 Gości: 245

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...