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

VPS Starter Arubacloud
0 głosów
3,090 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 235 wizyt
pytanie zadane 28 maja 2016 w PHP przez GaCeL Dyskutant (7,500 p.)
0 głosów
1 odpowiedź 359 wizyt
pytanie zadane 29 listopada 2019 w C# przez Antero00 Gaduła (3,670 p.)
0 głosów
1 odpowiedź 487 wizyt
pytanie zadane 21 września 2018 w C# przez seba Dyskutant (8,900 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,309 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...