• 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.

Hosting forpsi easy 1 pln
0 głosów
2,783 wizyt
pytanie zadane 31 października 2015 w C# przez Surykat Stary wyjadacz (14,760 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 Stary wyjadacz (14,760 p.)
Dziękuję, gra i buczy. :)

Podobne pytania

0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 29 listopada 2019 w C# przez Antero00 Gaduła (3,670 p.)
0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 28 maja 2016 w PHP przez GaCeL Dyskutant (7,500 p.)
0 głosów
1 odpowiedź 276 wizyt
pytanie zadane 21 września 2018 w C# przez seba Dyskutant (8,900 p.)

92,083 zapytań

140,741 odpowiedzi

317,701 komentarzy

61,405 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...