如何在ASP.NET中更改日期字符串的格式

3

我有一个日期字符串,格式为"30/01/2018", 我想要的格式是"2018/01/30"

我尝试了以下代码:

DateTime.Parse(startDate.Text.ToString()).ToString("yyyy/MM/dd");

and

DateTime.ParseExact(startDate.Text.ToString(),"dd/MM/yyyy").ToString("yyyy/MM/dd");

但是没有生效。 还有其他的解决方案吗?


你在 startDate.Text 中有什么内容 - sujith karivelil
你的代码使用了服务器或客户端机器的默认语言环境来执行。如果该语言环境无法理解字符串的格式,则无法将其转换为正确的日期时间值。这段代码运行的语言环境是什么?(顺便说一句,Text已经是一个字符串属性,调用ToString没有意义) - Steve
你将它传递给一个新变量了吗? - rjps12
同时,ParseExact没有仅带两个参数的重载,第一个示例也是如此。如果不添加CultureInfo参数,两者都无法编译。 - Steve
startDate.Text = "30/01/2018" @un-lucky 开始日期.文本 = "30/01/2018" @不幸的 - Farrukh Sarmad
我正在解析它并将其保存在一个新字符串@ninja中 - Farrukh Sarmad
6个回答

6

试试这样做

string newFormat = DateTime.ParseExact("30/01/2018", "dd/MM/yyyy", CultureInfo.InvariantCulture)
    .ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);

3
如果您想要字符串输出,为什么不进行拆分和重新排列呢?
string strOldFormat = "30/01/2018";
string[] strArrOldFormat = strOldFormat.Split('/');
string strNewFormat = strArrOldFormat[2] + "/" + strArrOldFormat[1] + "/" + strArrOldFormat[0];

3

转义您的斜杠(并使用具有ParseExact的Culture)

DateTime.ParseExact("30/01/2018","dd/MM/yyyy", CultureInfo.InvariantCulture)
    .ToString(@"yyyy\/MM\/dd")

或者在ToString中使用InvariantCulture而不是转义斜线:

...ToString(@"yyyy/MM/dd", CultureInfo.InvariantCulture)

原因是,/是日期的特殊格式字符: 自定义日期和时间格式字符串 - "/" 自定义格式说明符 “/”自定义格式说明符代表日期分隔符,用于区分年、月和日。适当的本地化日期分隔符从当前或指定文化的DateTimeFormatInfo.DateSeparator属性中检索。

2
需要转义的是反斜杠字符而不是正斜杠。 - Steve
@Steve 这个编辑是否解决了你的问题?使用 @"string" 格式,反斜杠不需要转义。 - grek40
只需在 ToString() 方法中使用 CultureInfo.InvariantCulture,您就不必担心日期分隔符的文化差异。 - Nino
@grek40 因为你不需要在第一个 dd/MM/yyyy 前面使用逐字字符,所以你不需要它,在第二个斜杠前面的反斜杠也是一样。 - Steve
@Nino 是的,我已经提到这是第二个选项了...但仍然同样有效的是转义特殊字符以便能够字面上使用它 :) - grek40
@grek40,好的,你是对的,但我认为这是过度设计。 - Nino

2

尝试使用以下示例代码:

var  actualStartDate = DateTime.ParseExact(startDate.Text.ToString(),"yyyy/MM/dd", CultureInfo.InvariantCulture);

1
你可以尝试这段代码。
string dateString = startDate.Text.ToString();
string format="yyyy/MM/dd"; 
string result;
CultureInfo provider = CultureInfo.InvariantCulture;
result = DateTimeOffset.ParseExact(dateString, format, provider).ToString();

或者您可以像这样将其捆绑成一行

,保留html,不要解释。

string result = DateTimeOffset.ParseExact(startDate.Text.ToString(),"yyyy/MM/dd", CultureInfo.InvariantCulture).ToString();

更多信息在这里


更多信息请参见 https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.parseexact?view=netframework-4.7.1#System_DateTimeOffset_ParseExact_System_String_System_String_System_IFormatProvider_ - Xar Hang

1
你可以使用这个;
String.Format("{0: yyyy/MM/dd}", yourDate);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接