• 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,139 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ź 69 wizyt
pytanie zadane 21 września 2018 w C# i .NET przez seba Dyskutant (8,730 p.)
0 głosów
1 odpowiedź 631 wizyt
pytanie zadane 6 czerwca 2017 w C# i .NET przez michal Mądrala (5,200 p.)
0 głosów
2 odpowiedzi 111 wizyt
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

62,306 zapytań

108,432 odpowiedzi

226,358 komentarzy

35,030 pasjonatów

Przeglądających: 154
Pasjonatów: 0 Gości: 154

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.

...