ฉันกำลังทำงานในโปรแกรมที่ต้องใช้วันที่ของกิจกรรมเพื่อรับคืน
ฉันกำลังมองหา a Dateไม่ใช่DateTime.
มีประเภทข้อมูลที่ส่งคืนวันที่หรือไม่
ฉันกำลังทำงานในโปรแกรมที่ต้องใช้วันที่ของกิจกรรมเพื่อรับคืน
ฉันกำลังมองหา a Dateไม่ใช่DateTime.
มีประเภทข้อมูลที่ส่งคืนวันที่หรือไม่
คำตอบ:
ฉันสร้างโครงสร้างวันที่อย่างง่ายสำหรับเวลาที่คุณต้องการวันที่ง่ายๆโดยไม่ต้องกังวลเกี่ยวกับส่วนของเวลาเขตเวลาท้องถิ่นกับ utc ฯลฯ
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
น่าเสียดายที่ไม่ได้อยู่ใน. Net BCL โดยปกติวันที่จะแสดงเป็นวัตถุ DateTime โดยตั้งเวลาไว้ที่เที่ยงคืน
อย่างที่คุณคาดเดาได้นั่นหมายความว่าคุณมีปัญหาเกี่ยวกับเขตเวลาของผู้ดูแลทั้งหมดแม้ว่าสำหรับวัตถุ Date คุณจะไม่ต้องการให้มีการจัดการเขตเวลาเลยก็ตาม
dateสำหรับสิ่งที่เป็นความคิดที่ไม่ดีถ้าคุณแน่ใจ 100% ของแอปเท่านั้นที่เคยจะดำเนินการในเขตเวลาหนึ่ง การบันทึกทุกอย่างเพื่อdatetimeให้คุณได้สิ่งที่ดีที่สุดของทั้งสองโลกรวมถึงวิธีที่ง่ายที่สุดในการหลีกเลี่ยงฝันร้ายในเขตเวลาหากการกำหนดเขตเวลาของเซิร์ฟเวอร์ของคุณเปลี่ยนแปลงไป ... และเริ่มเขียนข้อมูลในแบบที่คุณไม่คาดคิด Datetimeสามารถช่วยคุณไว้ที่นั่นdateไม่ได้เลยและจะกลายเป็นเรื่องยากที่จะแก้ไขหากคุณเริ่มdateจดบันทึกด้วยบริบทเขตเวลาที่ไม่ถูกต้อง
สร้างคลาส Wrapper สิ่งนี้:
public class Date:IEquatable<Date>,IEquatable<DateTime>
{
public Date(DateTime date)
{
value = date.Date;
}
public bool Equals(Date other)
{
return other != null && value.Equals(other.value);
}
public bool Equals(DateTime other)
{
return value.Equals(other);
}
public override string ToString()
{
return value.ToString();
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
public static explicit operator Date(DateTime dateTime)
{
return new Date(dateTime);
}
private DateTime value;
}
และเปิดเผยสิ่งที่valueคุณต้องการ
DateTimeKind.Unspecifiedเพื่อที่ว่าเมื่อต่อเนื่องจะได้รับการ deserialized โดยไม่ต้องแปลง (อาจมีการเปลี่ยนแปลงขึ้นอยู่กับวันที่แตกต่างกันในเขตเวลา)
DateTimeKind.Utc. อย่าตั้งค่าเป็นDateTimeKind.Unspecifiedเพราะจะรับประกันว่าจะได้รับอนุกรม / deserialized ด้วยการชดเชยเขตเวลาที่รวม! วันที่ในปฏิทินจะเหมือนกันโดยไม่คำนึงถึงเขตเวลาดังนั้นอย่าปล่อยให้ระบบปรับเปลี่ยน
ประเภทวันที่เป็นเพียงนามแฝงของประเภท DateTime ที่ VB.NET ใช้ (เช่น int กลายเป็นจำนวนเต็ม) ทั้งสองประเภทนี้มีคุณสมบัติ Date ที่ส่งคืนออบเจ็กต์ให้คุณโดยกำหนดส่วนเวลาเป็น 00:00:00
วัตถุ DateTime มีคุณสมบัติที่ส่งคืนเฉพาะส่วนวันที่ของค่า
public static void Main()
{
System.DateTime _Now = DateAndTime.Now;
Console.WriteLine("The Date and Time is " + _Now);
//will return the date and time
Console.WriteLine("The Date Only is " + _Now.Date);
//will return only the date
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
DateTimeโดยตั้งเวลาเป็น 0:00:00
ไม่มีDateDataType
อย่างไรก็ตามคุณสามารถใช้DateTime.Dateเพื่อรับเพียงวันที่
เช่น
DateTime date = DateTime.Now.Date;
DateTime.Now.DateเหมือนกับDateTime.Today. มีการDateTime.UtcNowส่งคืนค่าวันที่ - เวลาเป็นเวลาสากล (UTC) แต่ไม่มีวิธีการหรือคุณสมบัติที่เทียบเท่า UTC สำหรับวันนี้ DateTimeKind.UtcNow.Dateเป็นนิพจน์ที่เหมาะสม
คุณสามารถส่งคืน DateTime โดยที่ส่วนของเวลาคือ 00:00:00 น. และไม่ต้องสนใจมัน วันที่จะได้รับการจัดการเป็นจำนวนเต็มเวลาดังนั้นจึงควรรวมวันที่กับเวลาตามที่มีอยู่ในจำนวนเต็มอยู่ดี
สำหรับสิ่งนี้คุณต้องใช้วันที่ แต่ไม่ต้องสนใจค่าเวลา
โดยปกติวันที่จะเป็น DateTime พร้อมเวลาของ 00:00:00
DateTimeชนิดมี.Dateคุณสมบัติที่จะส่งกลับDateTimeด้วยเวลาชุดมูลค่าดังกล่าวข้างต้น
public class AsOfdates
{
public string DisplayDate { get; set; }
private DateTime TheDate;
public DateTime DateValue
{
get
{
return TheDate.Date;
}
set
{
TheDate = value;
}
}
}
คุณสามารถลองทำอย่างใดอย่างหนึ่งต่อไปนี้:
DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();
แต่ไม่มีประเภท "วันที่" ใน BCL