.NET Data Const (con la Globalizzazione)
Domanda
Qualcuno conosce un modo per dichiarare una costante di data che è compatibile con le date?
Ho provato:
' not international compatible
public const ADate as Date = #12/31/04#
' breaking change if you have an optional parameter that defaults to this value
' because it isnt constant.
public shared readonly ADate As New Date(12, 31, 04)
Soluzione
Se si guarda il generato dall'istruzione
public const ADate as Date = #12/31/04#
Vedrete questo:
.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )
Si noti che il DateTimeConstantAttribute viene inizializzato con un costruttore che prende un int64 numero di tick.Dal momento che questo conteggio è determinato a complilare il tempo, sembra improbabile che qualsiasi tipo di localizzazione è che entrano in gioco quando questo valore viene inizializzato in fase di runtime.La mia ipotesi è che l'errore è con qualche altra data in gestione nel codice, non const di inizializzazione.
Altri suggerimenti
Secondo la documentazione di Microsoft,
"È necessario racchiudere un valore letterale Data entro simboli di cancelletto ( # ).È necessario specificare il valore della data nel formato mm/gg/aaaa, ad esempio #5/31/1993#.Questo requisito è indipendente le impostazioni internazionali del computer impostazioni data e ora."
Stai dicendo che questo non è corretto e l'analisi è interessato dalla localizzazione corrente?
Edit: Hai provato con un anno a 4 cifre?
Una volta che si dispone di dati in Data oggetti in VB, non è necessario preoccuparsi di globalizzazione fino a quando si confronta qualcosa o si tenta di esportare.
Questo è bene:
Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date
SecondDate = FirstDate.AddDays(1)
Questo aggiunge la globalizzazione delle regole e delle stampe del thread corrente cultura formato:
HeaderLabel.Text = SecondDate.ToString()
Questo è male:
Dim BadDate as Date = CDate("2/20/2000")
In realtà anche questo è OK se si forza CDate in questo caso il diritto alla cultura (InvariantCulture):
Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)
Se si desidera forzare tutto a una cultura particolare, è necessario impostare il thread in esecuzione della cultura e della lingua dell'interfaccia utente desiderato cultura (en-US, invarianti, etc.).
Assicurati di non fare alcun lavoro, con le date come stringhe--assicurarsi che essi sono veri e propri oggetti di Data!
Ok, capisco di più dove si sono provenienti da..
Come circa:
- Creare un metodo statico che restituisce la data costante.In questo modo si supera la questione internazionale, dal momento che viene restituito come specifico valore di tipo DateTime.
- Ora mi ricordo opzionale params dal mio VB6 giorni, ma non solo sovraccaricare il metodo?Se si utilizza il metodo di overload", senza data, basta tirare dalla statica?
EDIT: Se non siete sicuri di cosa parlo e vorrei un esempio di codice, basta commentare questo post e mi chuck uno su.
OK, non sono sicuro di quello che stai cercando di fare qui:
- Il codice di registrazione è NON .NET, stai cercando di porto?
- DateTime non può essere dichiarato come costanti.
- DateTime sono un tipo di dati, in modo che una volta init sotto, il formato che erano init sotto è irrilevante.
- Se avete bisogno di un valore costante, quindi basta creare un metodo per restituire sempre lo stesso tipo DateTime.
Per esempio:
public static DateTime SadDayForAll()
{
return new DateTime(2001, 09, 11);
}
Aggiornamento
Dove diavolo sei ottenere tutto quello che?!
- C' sono le differenze tra C# e VB.NET e questo mette in evidenza uno di loro.
- Data non è un .NET tipo di dati - DateTime è.
- Sembra che sia possibile creare DateTime costanti in VB.NET ma ci sono delle limitazioni
- Il metodo è stato lì per cercare di aiutarti, in quanto non è possibile creare un const da un variabile (cioèopzionale param).Che non ha nemmeno senso.