[英]How to convert string to local Date Time?
我試圖轉換這種格式的字符串:
MM/dd/yyyy HH:mm
輸入來自美國數據庫,即:09/20/2010 14:30
我知道我的字符串總是美國時間,但是當我顯示它時,我需要將其轉換為本地時間,以便字符串應該變成:
09/20/2010 19:30 (for UK for instance)
我嘗試了一些東西,但是當我在美國機器上運行時,似乎沒有什么能給我正確的解決方案。
CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm", CultureInfo.CurrentCulture);
CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm", new CultureInfo("en-US"));
它們都在本地工作(美國機器),但它們不會將時間轉換為歐洲機器上的當地時間。
謝謝托尼
更新:如果要將數據可靠地轉換為其他任何內容,您必須知道數據的時區 (不僅僅是“US”)以及解釋機器。 您不僅要查看小時偏移量,而且DST也會根據位置而變化(並非所有區域都遵守它)。 東部是-4或-5,取決於一年中的時間。 如果日期足夠老,你會遇到“夏天”日期最近發生變化的問題。
您最好的方法是始終以UTC格式存儲時間戳。 除此之外,你可以猜測偏移量。
如果您想要轉換到其他時區,您應該使用UTC時間(新的,略有不同的GMT版本)。
DateTime dt = new DateTime(DateTime.Parse('2010-10-06 19:40').Ticks, DateTimeKind.Local);
dt.AddHours(5);
dt.ToLocalTime();
您也可以使用TimeZoneInfo ,它也會有DST信息。
試試這個 - 它將當地時間(以美國格式輸入)轉換為GMT,然后以GB / DE格式打印。
var zones = TimeZoneInfo.GetSystemTimeZones(); // retrieve timezone info
string value = "09/20/2010 14:30";
DateTime CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy HH:mm",
new CultureInfo("en-US"));
DateTime FinalDttm = TimeZoneInfo.ConvertTime(CompletedDttm,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"),
TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"));
string output = FinalDttm.ToString(new CultureInfo("en-GB"));
FinalDttm = TimeZoneInfo.ConvertTime(CompletedDttm, TimeZoneInfo.Local,
TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
output = FinalDttm.ToString(new CultureInfo("de-DE"));
輸出依次為:
20/09/2010 19:30:00
20.09.2010 20:30:00
我認為這是一個顯示問題,但需要更多信息才能確定。 嘗試在兩種情況下以yyyy-MM-dd格式顯示日期,以檢查問題是解析還是顯示。 如果您確切知道要接受或顯示的內容,則可以創建自定義格式信息對象:
public static DateTimeFormatInfo GetISOFormatInfo()
{
DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
dtFormat.DateSeparator = "-";
dtFormat.TimeSeparator = ":";
dtFormat.ShortDatePattern = "yyyy-MM-dd";
dtFormat.ShortTimePattern = "HH:mm:ss";
return dtFormat;
}
使用沒有TimeZone信息的日期,您將無法知道英國時間/加拿大時間等...因為您不知道誰(世界的哪個部分)在那個時間插入。 由於您特別說時間是美國時間,您可以添加世界不同地區的時差來顯示當地時間。
你可以使用string.Split。 首先在整個字符串上使用'/'分隔符。 您將獲得“09”“20”和“2010 14:30”,然后再使用''和':'分割2次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.