日期转换(c#,Asp.net MVC)
我正在尝试转换asp.net mvc web应用程序上的日期时间格式 我有以下代码:日期转换(c#,Asp.net MVC),c#,asp.net,asp.net-mvc,asp.net-mvc-4,datetime,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Datetime,我正在尝试转换asp.net mvc web应用程序上的日期时间格式 我有以下代码: date = Request["date"].AsDateTime().ToString("MM-dd-yyyy HH:mm:ss"); 当请求[“日期”]仅为当天的一位数字时,该代码工作正常 (如2016年3月8日)但当日期为两位数时 (如2016年3月15日) 它返回01-01-0001。。。有人能告诉我为什么,并告诉我如何使它更好吗 提前谢谢 编辑: 我正在使用的更多代码: 用于日期选择的Javascr
date = Request["date"].AsDateTime().ToString("MM-dd-yyyy HH:mm:ss");
当请求[“日期”]仅为当天的一位数字时,该代码工作正常(如2016年3月8日)但当日期为两位数时 (如2016年3月15日) 它返回01-01-0001。。。有人能告诉我为什么,并告诉我如何使它更好吗 提前谢谢 编辑: 我正在使用的更多代码: 用于日期选择的Javascript日期选择器:
<script>
$(document).ready(function() {
$('.date').datepicker({ dateFormat: "dd/mm/yy" });
});
</script>
试试这个:
DateTime unformattedDate;
if(DateTime.TryParse(Request["date"], out unformattedDate)
{
DateTime formattedDate = unformattedDate.ToString("MM-dd-yyyy HH:mm:ss");
}
试试这个:
DateTime unformattedDate;
if(DateTime.TryParse(Request["date"], out unformattedDate)
{
DateTime formattedDate = unformattedDate.ToString("MM-dd-yyyy HH:mm:ss");
}
.AsDateTime()
方法使用您当前的计算机区域性(这取决于您的应用程序App.Config
或Web.Config
)
如果您100%确定您的日期为dd-MM-yyyy
格式,则可以按如下方式进行打包:
DateTime.ParseExact(Request["date"], "dd-MM-yyyy", CultureInfo.InvariantCulture)
.ToString("MM-dd-yyyy HH:mm:ss");
$('.datepicker').datepicker({ dateFormat: '@System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern' });
正如Stephen Muecle提到的,最好使用DateTime.TryParseExact()
方法:
//here you can define more that one format to parce
string[] formats = { "dd-MM-yyyy"};
DateTime resultDate = new DateTime();
if (DateTime.TryParseExact(Request["date"], formats, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate))
{
//if everything good you will have your date in resultDate variable
date = resultDate.ToString("MM-dd-yyyy HH:mm:ss");
}
else
{
//here the logic if parce fails
}
作为Panagiotis Kanavos menthion,硬编码文化不是一个好主意。如果你想把事情做好,你就应该应对全球化
在Web.Config
中,您应该设置uiCulture
和culture
:
<globalization uiCulture="en-GB" culture="en-GB" />
如果您在Web.Config
中设置全球化,您的whoule应用程序区域性将同步,您甚至可以使用.AsDateTime()
.AsDateTime()
方法使用您当前的计算机区域性(这取决于您的应用程序App.Config
或Web.Config
)
如果您100%确定您的日期为dd-MM-yyyy
格式,则可以按如下方式进行打包:
DateTime.ParseExact(Request["date"], "dd-MM-yyyy", CultureInfo.InvariantCulture)
.ToString("MM-dd-yyyy HH:mm:ss");
$('.datepicker').datepicker({ dateFormat: '@System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern' });
正如Stephen Muecle提到的,最好使用DateTime.TryParseExact()
方法:
//here you can define more that one format to parce
string[] formats = { "dd-MM-yyyy"};
DateTime resultDate = new DateTime();
if (DateTime.TryParseExact(Request["date"], formats, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out resultDate))
{
//if everything good you will have your date in resultDate variable
date = resultDate.ToString("MM-dd-yyyy HH:mm:ss");
}
else
{
//here the logic if parce fails
}
作为Panagiotis Kanavos menthion,硬编码文化不是一个好主意。如果你想把事情做好,你就应该应对全球化
在Web.Config
中,您应该设置uiCulture
和culture
:
<globalization uiCulture="en-GB" culture="en-GB" />
如果您在Web.Config
中设置全球化,您的whoule应用程序区域性将同步,您甚至可以使用.AsDateTime()
尝试使用以下方法:
DateTime date = new DateTime();
date = (DateTime)Request["date"];
String myDate=date.ToString();
尝试使用以下方法:
DateTime date = new DateTime();
date = (DateTime)Request["date"];
String myDate=date.ToString();
很可能是因为
.AsDateTime()
扩展方法使用的区域性是MM-dd-yyyy
,11-03-2016
有效吗?为什么要从请求对象读取查询参数,而不是使用操作参数?为什么要使用本地化格式,而不是可以明确解析的2015-03-15格式?该参数来自何处?如果将其更改为ISO格式,甚至可以在操作中使用DateTime类型的参数method@StephenMuecke是的,2016年3月11日working@PanagiotisKanavos我之所以使用该请求,是因为我在视图中使用了javascript日期选择器,而这就是日期的来源扩展方法正在使用区域性解析数据,该区域性为MM dd yyyy
-11-03-2016
有效吗?为什么要从请求对象读取查询参数而不是使用操作参数?为什么要使用本地化格式,而不是可以明确解析的2015-03-15格式?该参数来自何处?如果将其更改为ISO格式,您甚至可以在操作中使用DateTime类型的参数method@StephenMuecke是的,2016年3月11日working@PanagiotisKanavos我之所以使用请求,是因为我在视图中使用了javascript日期选择器,这就是日期的来源。为什么不以完全相同的方式失败?为什么不以完全相同的方式失败方法?TryParseExact()
最好避免任何潜在的异常。硬编码日期格式是个坏主意。使用标准YYYY-MM-DD要好得多format@StephenMuecke实际上情况会更糟,因为即使日期文本无效,它也允许处理-除非使用正确的处理代码(例如检查丢失的、无效的值)@PanagiotisKanavos,如果使用TryParseExact()
您可以在使用之前测试结果。ToString()
@PanagiotisKanavos同意最好使用标准格式。但是,如果你必须本地化你的应用程序,你必须在你的所有应用程序中同步你的区域性,并从System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
TryParseExact()
中获取格式,以避免任何潜在的异常。硬编码日期格式是个坏主意。使用标准YYYY-MM-DD要好得多format@StephenMuecke实际上情况会更糟,因为即使日期文本无效,它也允许处理-除非使用正确的处理代码(例如检查丢失的、无效的值)@PanagiotisKanavos,如果使用TryParseExact()
您可以在使用之前测试结果。ToString()
@PanagiotisKanavos同意最好使用标准格式。但是,如果你必须本地化你的应用程序,你必须在你的所有应用程序中同步你的区域性,并从System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
获取你的格式。