Regional and language option   zodpovězená otázka

VB.NET, XML

Dobrý den,

místo databáze používám XML. Do XML ukládám string ve formátu

dd.MM.yyyy HH:mm:ss.

Pro tento účel používám "Format"

Když datum a čas opět načítám, používám TryParseExact, do stejného formátu tedy opět do

dd.MM.yyyy HH:mm:ss

Vše mi funguje bez problému do té doby, dokud nezměním v

Regional and language option z Czech na English(US).

Po načtení datumů mi program ukazuje nějaké nesmysly.

1) Je toto možné programově nějak přepnout?

2) Jak alespoň zkontrolvat zda je toto nastavení jiné na jiném počítači, abych zabránil programu přepsat data na nesmysly?

Díky za radu,

PetrS

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Řešení je uplně jednoduché. Veškerá data ukládejte a načítejte v NEUTRÁLNÍ KULTUŘE (CultureInfo.InvariantCulture), která není závislá na nastavení systému. Formátování pro danou kulturu provádějte vždy až na úrovni zobrazení v uživatelském rozhraní. Přesně pro tyto účely byla neutrální kultura navržena.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den,

dostal jsem se k tomu že načtu data pomocí tryParseExact ve formátu

"dd.MM.yyyy HH:mm:ss",Globalization.CultureInfo.InvariantCulture

Načtení je bez chyby.

Při ukládání používám:

dateAsString = myDate.ToString(Globalization.CultureInfo.InvariantCulture)

Uložení je bez chyby, datum vidím například ve formátu:

03/26/2008 00:00:00

Proceduru, kde data opět načítám přepíšu na

vdate=Date.Parse(maybeDate, Globalization.CultureInfo.InvariantCulture)

V tomto případě už to neumí převézt 03/26/2008 00:00:00 zpět do formátu datum.

Zkoušel jsem i Cdate(maybeDate), TryParseExact do formátu MM/dd/yyyy HH:mm:ss.

Nic z toho nefunguje.

Nevíte kde by mohla být chyba?

PetrS

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud ale nastavím Regional and language options na English (US), pak to funguje.

Tedy ten tvar moc nezávislý není, neřeší to můj problém.

Pokud mám Regional and language options na Czech, funkce parse nerozpozná

string "03/26/2009 05:00:00" jako datum. Myslím si že mu nějak nedochází, že měsíc a den jsou přehozeny.

Nevíte prosím co s tím, nebo kde dělám chybu?

PetrS

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zřejmě děláte něco špatně, protože to funguje bez problémů. Následující kód jsem testoval na Windows Vista s Aktuálním formátem Čeština (Česká republika) a Aktuálním umístěním Česká republika (Místní a jazykové nastavení v Ovládacích panelech).

Dim dateTimeString = Date.Now.ToString(CultureInfo.InvariantCulture)
Dim dateTime = Date.Parse(dateTimeString, CultureInfo.InvariantCulture)

Nepoužívejte ParseExact, ale jenom Parse. Předpokládám že víte, že metodě Parse s parametrem InvariantCulture musíte předat textový řetězec představující datum právě v té neutrální (Invariant) kultuře.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

takhle to přesně dělám, pomocí InvariantCulture datum uložím do stringu a pak pomocí parse a opět invariantCulture to načítám.

Uloží se to ve formátu MM/dd/yyyy HH:mm:ss, ale když mám nastaveno Czech v regional and language option, dd bere jako měsíc. pokud je den větší než 12 tak je to samozřejmě chyba.

Vyřešil jsem to tak že si vyžádám formát dne a měsíce a kontroluju čím string začíná. Pokud začíná "d" přehodím MM s DD, opět složím string a pak už to funguje. No ale nevim nevim, je to jen provizorní. Kdyby Vás něco napadlo, prosím dejte vědět.

Ještě to zkusím jednou, přeci jen ráno moudřejší večera. :)

Díky za pomoc.

PetrS

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takhle to nedělejte, to je naprostá pitomost, problém bude někde jinde. Jaká je vaše verze Windows (včetně jazykové mutace) a .NET Frameworku?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

- Version 5.1 (Build 2600.xpsp_sp3_gdr.080814-1236:Service Pack 3).

- Jazyková mutace English (United States)

- .NET FW mám 3.5 SP1 ale program je napsán pro .NET 2.0. Tam mám SP2

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je divné. Zkuste si vytvořit uplně nový projekt a vložte do něj přesně mnou uvedený kód. Pokud se to i potom bude chovat nemravně, potom by asi nezbylo nic jiného než provést revizi celého vašeho ukládání a načítání.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyřešeno.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem míchal hrušky s jabkama, obrázky jsem pro jistotu odstranil, aby jste se mi tu nesmáli :).

Díky moc za pomoc,

PetrS

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

*

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback