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)
È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top