سؤال

لا أحد يعرف من وسيلة لإعلان موعد ثابت متوافق مع التواريخ ؟

لقد حاولت:

' 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)
هل كانت مفيدة؟

المحلول

إذا نظرتم IL الناتجة عن البيان

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

ستظهر لك هذه:

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

لاحظ أن DateTimeConstantAttribute يتم تهيئة مع منشئ أن يأخذ int64 علامة الاعتماد.لأن هذا علامة الاعتماد يتم تحديدها في complile الوقت ، يبدو من غير المحتمل أن أي التعريب قادم في اللعب عند هذه القيمة يتم تهيئة في وقت التشغيل.أعتقد أن الخطأ من التاريخ في التعامل مع التعليمات البرمجية الخاصة بك ، وليس const التهيئة.

نصائح أخرى

وفقا Microsoft الوثائق ،

"يجب أن ترفق تاريخ الحرفي في عدد علامات (# #).يجب تحديد قيمة التاريخ في شكل M/d/yyyy ، على سبيل المثال #5/31/1993#.هذا الشرط هو مستقل من الإعدادات المحلية الخاصة بك وجهاز الكمبيوتر الخاص بك هو صيغة التاريخ والوقت إعدادات".

أنت تقول أن هذا غير صحيح و تحليل يتأثر الحالية اللغة ؟

تحرير: هل جربت مع 4 أرقام السنة ؟

مرة واحدة لديك البيانات في تاريخ الكائنات في VB, كنت لا داعي للقلق حول العولمة حتى يمكنك مقارنة شيء أو محاولة تصديره.

هذا على ما يرام:

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

SecondDate = FirstDate.AddDays(1)

هذا تسحب في العولمة قواعد ويطبع في الترابط الحالي الثقافة الشكل:

HeaderLabel.Text = SecondDate.ToString()

هذا هو سيء:

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

في الواقع--حتى أنه على ما يرام إذا كنت قوة cdate بينما في هذه الحالة إلى استخدام حق الثقافة (InvariantCulture):

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

إذا كنت ترغب في فرض شيء معين الثقافة تحتاج إلى تعيين المنفذة موضوع الثقافة و الثقافة واجهة المستخدم المطلوب الثقافة (en-US, ثابتة, الخ.).

تأكد من أنك لا تقوم بأي عمل مع التواريخ مثل السلاسل--تأكد من أنها الفعلية تاريخ الكائنات!

حسنا أنا أفهم أكثر أين أنت قادم من....

ماذا عن:

  • إنشاء أسلوب ثابت الذي يعود تاريخ ثابت.هذا يتغلب الدولية المشكلة لأنه يتم إرجاع المحددة قيمة تاريخ / وقت.
  • الآن أتذكر اختياري params من VB6 أيام ، ولكن ألا تستطيع أن تفرط في الأسلوب ؟ إذا كنت تستخدم طاقتها طريقة بدون تاريخ, فقط اسحب من الخطة ؟

تحرير: إذا كنت غير متأكد ما يعني أن مثل نموذج التعليمات البرمجية فقط التعليق هذا المنصب و سوف تشاك واحد.

حسنا, أنا غير متأكد ما كنت تحاول أن تفعل هنا:

  • مدونة تقوم بالإرسال هو لا .صافي, هل تحاول الميناء ؟
  • التاريخ والوقت هذا لا يمكن أن أعلن عن الثوابت.
  • التاريخ والوقت هي نوع البيانات ، وذلك مرة واحدة init رائد شكل كانت init تعرف من هو غير ذي صلة.
  • إذا كنت بحاجة إلى قيمة ثابتة ، ثم إنشاء مجرد طريقة العودة دائما نفس التاريخ والوقت.

على سبيل المثال:

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

التحديث

أين يمكنك الحصول على كل هذا؟!

  • هناك هي الاختلافات بين C# و VB.NET وهذا يسلط الضوء على واحد منهم.
  • تاريخ ليس .صافي نوع البيانات - التاريخ والوقت هو.
  • يبدو أنك يمكن أن تخلق التاريخ والوقت الثوابت في VB.NET ولكن هناك قيود
  • طريقة كانت هناك محاولة مساعدتك, حيث لا يمكنك إنشاء const من متغير (أياختياري المعلمة).هذا لا معنى له.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top