Question

Quelqu'un connaît-il un moyen de déclarer une date constante compatible avec les dates internationales ?

J'ai essayé:

' 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)
Était-ce utile?

La solution

Si vous regardez l'IL généré par l'instruction

public const ADate as Date = #12/31/04#

Vous verrez ceci :

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

Notez que le DateTimeConstantAttribute est en cours d'initialisation avec un constructeur qui prend un nombre de ticks int64.Étant donné que ce nombre de ticks est déterminé au moment de la compilation, il semble peu probable qu'une localisation entre en jeu lorsque cette valeur est initialisée au moment de l'exécution.Je suppose que l'erreur vient d'une autre gestion de date dans votre code, pas de l'initialisation const.

Autres conseils

D'après la documentation Microsoft,

"Vous devez entourer un littéral Date entre des signes dièse (# #).Vous devez spécifier la valeur de la date au format M/j/aaaa, par exemple #5/31/1993#.Cette exigence est indépendante de vos paramètres régionaux et des paramètres de format de date et d'heure de votre ordinateur."

Êtes-vous en train de dire que ce n'est pas correct et que l'analyse est affectée par les paramètres régionaux actuels ?

Modifier: Avez-vous essayé avec une année à 4 chiffres ?

Une fois que vous avez des données dans des objets Date dans VB, vous n'avez pas à vous soucier de la mondialisation jusqu'à ce que vous y compariez quelque chose ou que vous essayiez de l'exporter.

C'est bon:

Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date

SecondDate = FirstDate.AddDays(1)

Cela récupère les règles de globalisation et les imprime dans le format culturel du fil de discussion actuel :

HeaderLabel.Text = SecondDate.ToString()

C'est mauvais:

Dim BadDate as Date = CDate("2/20/2000")

En fait, même cela est OK si vous forcez CDate dans ce cas à utiliser la bonne culture (InvariantCulture) :

Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)

Si vous souhaitez tout forcer sur une culture particulière, vous devez définir la culture du thread d'exécution et la culture de l'interface utilisateur sur la culture souhaitée (en-US, invariant, etc.).

Assurez-vous que vous n'effectuez aucun travail avec des dates sous forme de chaînes - assurez-vous qu'il s'agit de véritables objets Date !

Ok, d'accord, je comprends mieux d'où tu viens..

Que diriez-vous:

  • Créez une méthode statique qui renvoie la constante de date.Cela résout le problème international puisqu’il est renvoyé sous la forme d’une valeur DateTime spécifique.
  • Maintenant, je me souviens des paramètres facultatifs de mes jours VB6, mais ne pouvez-vous pas simplement surcharger la méthode ?Si vous utilisez la méthode surchargée sans la date, retirez-la simplement du statique ?

MODIFIER: Si vous n'êtes pas sûr de ce que je veux dire et que vous souhaitez un exemple de code, commentez simplement cet article et j'en publierai un.

OK, je ne suis pas sûr de ce que vous essayez de faire ici :

  • Le code que vous postez est PAS .NET, essayez-vous de porter ?
  • Les DateTime ne peuvent pas être déclarés comme constantes.
  • Les DateTime sont un type de données, donc une fois lancés, le format à partir duquel ils ont été lancés n'est pas pertinent.
  • Si vous avez besoin d'une valeur constante, créez simplement une méthode pour toujours renvoyer le même DateTime.

Par exemple:

public static DateTime SadDayForAll()
{
    return new DateTime(2001, 09, 11);
}

Mise à jour

D'où diable sors-tu tout ça ?!

  • sont différences entre C# et VB.NET, et cela met en évidence l'une d'entre elles.
  • Date n'est pas un Type de données .NET - DateHeure est.
  • Il semble que vous puissiez créer des constantes DateTime dans VB.NET mais il existe des limitations
  • La méthode était là pour essayer de vous aider, puisque vous ne pouvez pas créer un const à partir d'un variable (c'est à dire.paramètre facultatif).Cela n'a même pas de sens.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top