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

Object Storage Arubacloud
0 głosów
2,921 wizyt
pytanie zadane 31 października 2015 w C# przez Surykat Stary wyjadacz (14,780 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,780 p.)
Dziękuję, gra i buczy. :)

Podobne pytania

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

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich 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 10% 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!

...