簡體   English   中英

字符串到C#中的DateTime轉換

[英]string to DateTime conversion in C#

愚蠢的問題,但無法解決它...我有一個這種格式的字符串20081119

我有一個C#方法將字符串轉換為DateTime以輸入SQL Server數據庫

public static DateTime MyDateConversion(string dateAsString)
    {

        return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);

    }

問題是日期是這樣的:Date = 19/11/2008 12:00:00 AM我需要它是yyyyMMdd類型的DateTime,因為我將它映射到一個模式來調用存儲過程。

先謝謝你們。

干杯,Con

沒有“yyyyMMdd類型的DateTime”這樣的東西; DateTime只是一個大整數,表示一個紀元中的時間量 - 它沒有格式。 但這很好,因為你應該使用參數化的TSQL - 所以只需添加DateTime作為DbParameter的值,它將以明確的方式傳遞給db(不要使用字符串連接來構建TSQL命令) ):

DbParameter param = cmd.CreateParameter();
param.ParameterName = "@foo";
param.DbType = DbType.DateTime;
param.Value = yourDateTime; // the DateTime returned from .ParseExact
cmd.Parameters.Add(param);

或者對於SqlCommand

cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime;

如果你真的需要一個字符串,那么只需將字符串直接用作[n] [var] char參數。

另外 - 在這種情況下,要解析日期我將使用不變文化(因為文化不具有格式):

DateTime yourDateTime =
            DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture);

從對話中,似乎您可能還需要從DateTime轉到字符串,在這種情況下只需將其反轉:

string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture);

Date Time是一個類,默認情況下,它將ToString格式化為19/11/2008 12:00:00 AM

這是來自MSDN ,它可以幫助您

由於日期和時間值的出現取決於諸如文化,國際標准,應用程序要求和個人偏好等因素,因此DateTime結構通過其ToString方法的重載在格式化日期和時間值方面提供了極大的靈活性。 默認的DateTime.ToString()方法使用當前區域性的短日期和長時間模式返回日期和時間值的字符串表示形式。 以下示例使用默認的DateTime.ToString()方法,使用en-US文化的短日期和長時間模式顯示日期和時間,en-US文化是運行該示例的計算機上的當前文化。

因此,您可以將DateTime上的ToString重載為所需的格式,否則將字符串表示形式直接傳遞給存儲過程

好的,回到文化的東西......當你說:

日期如下:Date = 19/11/2008 12:00:00 AM

我猜你在日期運行ToString來看到這個結果? ToString中的格式將根據文化而有所不同,默認情況下將使用您當前的文化。

通過這樣做,我能夠重現你所獲得的格式:

var dateString = "20081119";
var fr = new System.Globalization.CultureInfo("fr-FR");
var resultingDate =DateTime.ParseExact(dateString,"yyyyMMdd",System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(resultingDate.ToString(fr));

你有一個有效的日期,所以格式化無關緊要,但如果確實如此,你需要以你描述的格式獲取它,那么你需要在轉換為字符串時格式化...如果它已經是一個字符串,那么就沒有必要進行日期轉換。

我可能會誤讀你的問題,但我不得不把它拿出來b / c它讓我煩惱。

我認為這是由於CurrentCulture中的文化設置,不知道那是什么,我無法確定,但指定en-US工作在我的最后。 這是我的代碼:

var dateString = "20081119";
var enUS = new System.Globalization.CultureInfo("en-US");
var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS);
Console.WriteLine(resultingDate.ToString());

試一試,看看它是否適合你。

這將給出您正在尋找的確切結果:

convert(varchar(10),getdate(),112):datetime to string(YYYYMMDD format)

convert(datetime,'20081203',112):string to datetime(YYYYMMDD format)

代碼方:

DateTimeFormatInfo fmt =(new CultureInfo(“hr-HR”))。DateTimeFormat; Console.WriteLine(thisDate.ToString(“d”,fmt)); //顯示15.3.2008(根據您的要求使用類似格式)

要么

date1.ToString(“YYYYMMDD”,CultureInfo.CreateSpecificCulture(“en-US”))date1.ToString(“YYYYMMDD”);

有關詳細信息,請訪問http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM