مشاركة عبر


تنسيق التاريخ و الوقت لثقافة معينة

البنية: DateTime توفر أساليب تتيح لتطبيقاتك تنفيذ عمليات متحسسة للثقافة على نوع: DateTime . يمكن للتطبيق استخدام فئة: DateTimeFormatInfo فئة لتنسيق و عرض نوع:DateTime استناداً إلى الثقافة. على سبيل المثال، باستخدام ShortDatePattern ، التاريخ 1 فبراير 2001 يمكن تنسيقه كـ 2/1/2001 للثقافة الإنجليزية (الولايات المتحدة) ، "en - US" و كـ 01/02/2001 للثقافة الإنجليزية (المملكة المتحدة) ، "en-GB" .

يمكن إنشاء الكائن: DateTimeFormatInfo لثقافة محددة أو للثقافة الثابتة و لكن ليس لثقافة محايدة. الثقافة المحايدة لا توفر معلومات كافية لعرض تنسيق التاريخ الصحيح. يتم طرح استثناء إذا حاول التطبيق إنشاء كائن DateTimeFormatInfo باستخدام ثقافة محايدة. للحصول على معلومات إضافية وأمثلة عن استخدام التنسيق DateTime ، راجع سلاسل تنسيق الوقت و التاريخ .

مثال التعليمات البرمجية التالي يعرض التاريخ الحالي باستخدام ShortDatePattern عندما تكون الثقافة الحالية CurrentThread معينة إلى الإنجليزية (الولايات المتحدة) ، "en - US" ، ثم إلى الألمانية (ألمانيا) "de-DE".

Imports System
Imports System.Globalization
Imports System.Threading

Public Class FormatDate
   
   Public Shared Sub Main()
      Dim dt As DateTime = DateTime.Now
      ' Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"))
      
      ' Creates a CultureInfo for German in Germany.
      Dim ci As New CultureInfo("de-DE")
      ' Displays dt, formatted using the ShortDatePattern
      ' and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class FormatDate
{
   public static void Main()
   {
      DateTime dt = DateTime.Now;
      // Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Displays dt, formatted using the ShortDatePattern
      // and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"));
      
      // Creates a CultureInfo for German in Germany.
      CultureInfo ci = new CultureInfo("de-DE");
      // Displays dt, formatted using the ShortDatePattern
      // and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci));
   }
}

في حالة تنفيذ هذه التعليمات البرمجية في ٩ يوليو, 2001 ، يظهر المخرج كما يلي:

7/9/2001
09.07.2001

العمل مع المناطق الزمنية

دائماً ما تستخدم البنية: DateTime المنطقة الزمنية المحلية للعمليات الحسابية و المقارنات. يجب أخذ ذلك في الاعتبار عندما يستخدم التطبيق الخاص بك أساليب Parse() و ParseExact() . توفر هذه الأساليب تحميلات زائدة تسمح بتحويل تمثيل السلسلة للتاريخ و الوقت إلى نوع: DateTime . يمكن أيضاً للتطبيق الخاص بك تنسيق النوع: DateTime لثقافة معينة. إذا لم يتم تحديد منطقة زمنية في السلسلة التي تم تمريرها لهذه الأساليب، تقوم باسترداد الوقت و التاريخ المحللة بدون إجراء ضبط للمنطقة الزمنية. التاريخ و الوقت يستندان على إعداد المنطقة الزمنية الخاص بنظام التشغيل. إذا كان التطبيق يحدد تعويض منطقة زمنية, هذه الأساليب تقوم بتحليل سلسلة الوقت/التاريخ، و تحويلها إلى التوقيت العالمي المتفق عليه (UTC ، المعروف سابقاً باسم توقيت غرينتش أو GMT) ثم تحويله إلى وقت النظام المحلي.

يجب على التطبيق استخدام أسلوب: ToUniversalTime لتحويل نوع محلي: DateTime إلى الـ UTC المكافئ. لتحليل سلسلة التاريخ/الوقت وتحويلها إلى نوع UTC : DateTime، يجب على التطبيق استخدام قيمة AdjustToUniversal الخاصة بقائمة التعداد: DateTimeStyles إما بأسلوب Parse() أو أسلوب: ParseExact() .

مثال التعليمات البرمجية التالي ينشئ النوع: DateTime للتوقيت المحلي ثم يحوله إلى ما يكافئه في الـ UTC. يتم تحويل كلا النوعين إلى سلاسل و كتابتهما إلى وحدة التحكم. لاحظ أن السلاسل تختلف بالإزاحة بين المنطقة الزمنية المحلية و UTC. يتم تحويل السلاسل مرة أخرى إلى أنواع: DateTime باستخدام أسلوب: ParseExact() . لالتقاط معلومات المنطقة الزمنية المخزنة في utcdt ، يجب تعيين القيمة AdjustToUniversal الخاصة بـ DateTimeStyles كمعامل لأسلوب: ParseExact . لمزيد من المعلومات حول إزاحة UTC عن المناطق الزمنية المختلفة، راجع GetUtcOffset.

Imports System
Imports System.Globalization
Imports System.Threading

Public Class TimeZoneSample
   Public Shared Sub Main()
      Dim en As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = en

      ' Creates a DateTime for the local time.
      Dim dt As New DateTime(2001, 7, 13, 4, 0, 0)

      ' Converts the local DateTime to the UTC time.
      Dim utcdt As DateTime = dt.ToUniversalTime()

      ' Defines a custom string format to display the DateTime.
      ' zzz specifies the full time zone offset.
      Dim format As [String] = "MM/dd/yyyy hh:mm:sszzz"

      ' Converts the local time to a string
      ' using the custom format string and display.
      Dim str As [String] = dt.ToString(format)
      Console.WriteLine(str)

      ' Converts the UTC time to a string
      ' using the custom format string and display.
      Dim utcstr As [String] = utcdt.ToString(format)
      Console.WriteLine(utcstr)

      ' Converts the string back to a local DateTime and displays it.
      Dim parsedBack As DateTime = DateTime.ParseExact(str, format, 
            en.DateTimeFormat)
      Console.WriteLine(parsedBack)

      ' Converts the string back to a UTC DateTime and displays it.
      ' If you do not use the DateTime.ParseExact method that takes
      ' a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      ' will not include the time zone information. 
      Dim parsedBackUTC As DateTime = DateTime.ParseExact(str, format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal)
      Console.WriteLine(parsedBackUTC)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TimeZoneSample
{
   public static void Main()
   {
      CultureInfo en = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = en;

      // Creates a DateTime for the local time.
      DateTime dt = new DateTime(2001, 7, 13, 4, 0, 0);

      // Converts the local DateTime to the UTC time.
      DateTime utcdt = dt.ToUniversalTime();

      // Defines a custom string format to display the DateTime value.
      // zzzz specifies the full time zone offset.
      String format = "MM/dd/yyyy hh:mm:sszzz";

      // Converts the local DateTime to a string 
      // using the custom format string and display.
      String str = dt.ToString(format);
      Console.WriteLine(str);

      // Converts the UTC DateTime to a string 
      // using the custom format string and display.
      String utcstr = utcdt.ToString(format);
      Console.WriteLine(utcstr);

      // Converts the string back to a local DateTime and displays it.
      DateTime parsedBack =
            DateTime.ParseExact(str,format,en.DateTimeFormat);
      Console.WriteLine(parsedBack);

      // Converts the string back to a UTC DateTime and displays it.
      // If you do not use the DateTime.ParseExact method that takes
      // a DateTimeStyles.AdjustToUniversal value, the parsed DateTime
      // object will not include the time zone information.
      DateTime parsedBackUTC = DateTime.ParseExact(str,format, _
            en.DateTimeFormat, DateTimeStyles.AdjustToUniversal);
      Console.WriteLine(parsedBackUTC);
   }
}

تنتج هذه التعليمات البرمجية المخرج التالي:

07/13/2001 04:00:00-07:00
07/13/2001 11:00:00-07:00
7/13/2001 4:00:00 AM
7/13/2001 11:00:00 AM

العمل مع الأعضاء DateTime

عند استخدام البنية DateTime ، يجب أن تكون على علم أن الأعضاء مثل Day تكون مبنية على التقويم الميلادي. حتى إذا قام التطبيق الخاص بك بتغيير التقويم الحالي أو السماح للمستخدم بتغيير إعدادات التاريخ و الوقت من خلال الخيارات الإقليمية و خيارات اللغة في "لوحة التحكم" ، يظل التقويم الميلادي يستخدم لإجراء العمليات الحسابية لأساليب: DateTime التي تحمى الحسابات المنفذة بواسطة هذه الأساليب من الإفساد بواسطة إعدادات المستخدم. إذا كنت ترغب في أن يقوم التطبيق الخاص بك بتنفيذ عمليات الوقت و التارسخ المتحسسة للثقافة استناداً إلى التقويم الحالي، يجب على التطبيق استخدام خاصية: Calendar لاستدعاء الأساليب التي توفرها الفئة: Calendar مثل GetDayOfMonth. لمزيد من المعلومات حول الاختلاف في القيم التي يتم استردادها بواسطة الأعضاء: DateTime و الأعضاء Calendar راجع: استخدام تقويمات لثقافات معينة.

عند العمل مع البنية: DateTime ، يجب أن تكون على علم أن النوع DateTime هو قيمة غير قابلة للتغيير. لذلك، الأساليب مثل AddDays تقوم باسترداد قيمة DateTime جديدة بدلاً من زيادة قيمة موجودة. يوضح المثال التالي كيفية زيادة نوع DateTime بيوم باستخدام العبارة dt = dt.AddDays(1).

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   
   Public Shared Sub Main()
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      
      Dim dt As DateTime = DateTime.Now
      Console.WriteLine(ControlChars.Newline + " Today is {0}", _
         DateTime.Now.ToString("d"))
      
      ' Increments dt by one day.
      dt = dt.AddDays(1)
      Console.WriteLine(ControlChars.Newline + " Tomorrow is {0}", _
         dt.ToString("d"))
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TestClass
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

      DateTime dt = DateTime.Now;
      Console.WriteLine("Today is {0}", DateTime.Now.ToString("d"));

      // Increments dt by one day.
      dt = dt.AddDays(1);
      Console.WriteLine("Tomorrow is {0}", dt.ToString("d"));

   }
}

إذا قمت بتنفيذ هذه التعليمات البرمجية في 3 أغسطس, 2001 ، تعرض المخرج التالي:

Today is 8/3/2001
Tomorrow is 8/4/2001

راجع أيضًا:

موارد أخرى

الترميز و الترجمة

سلاسل تنسيق الوقت والتاريخ