.net视图中日期格式化

  昨天在做一个功能,要在界面上按照规定的格式显示一个时间,如果直接在expression那里格式化的话(如下:)

  

@Html.DisplayFor(c => Convert.ToDateTime(c.IssueDate).ToString("yyyy-MM-dd HH:mm:ss"), new
        {
            @class = "form-control",
            onFocus = "WdatePicker({dateFmt:‘yyyy-MM-dd HH:mm:ss‘,alwaysUseStartDate:true})",
            @placeholder = "签发日期"
        })

  以上情形,执行期间会报拒绝访问的问题,当然这并非难事,解决方案有好几种(本人前端时间控件用的是My97Datepicker):

  (ps.这里忽略那种非绑定Model的情形,因为不绑定Model那种情况,就只是显示一个时间的话,就可以直接用ToString(string format)就可以格式化时间格式了;同时也可以使用format的简写,format简写可以参考:http://www.cnblogs.com/shaocm/archive/2012/08/15/2639998.html

  第一种,最简单的是直接在后台把该字段在后台使用ToString(string format)格式化好规定的格式,再绑定在前台,因为个人在这里是使用AutoMap直接把数据库的值映射到该Model上的,故此方法看起来有些别扭,故不用此方法。

  第二种,如果你只是需要在界面上显示,并非可编辑的情况的话,比如:

    

        @Html.DisplayFor(c => c.IssueDate, new
        {
            @class = "form-control",
            onFocus = "WdatePicker({dateFmt:‘yyyy-MM-dd HH:mm:ss‘,alwaysUseStartDate:true})",
            @placeholder = "签发日期"
        })

    这时候,你直接可以在Model的属性上面加上如下注解:

        /// <summary>
        /// IssueDate
        /// </summary>
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}")]
        public DateTime? IssueDate { get; set; }

  这样就可以通过注解直接控制该属性的日期显示格式了,这里要注意,如果视图界面上使用的并非是@Html.DisplayFor,而是使用@Html.TextBoxFor或者是@Html.EditorFor的话,该注解格式化则不起作用。

  第三种,如果界面上使用的是@Html.EditorFor的话,这时也可以通过加上另外一个注解来控制界面显示格式,如下:

    

        /// <summary>
        /// IssueDate
        /// </summary>
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}")]
        public DateTime? IssueDate { get; set; }

  然后界面上使用:

@Html.EdittorFor(c => c.IssueDate, new
        {
            @class = "form-control",
            onFocus = "WdatePicker({dateFmt:‘yyyy-MM-dd HH:mm:ss‘,alwaysUseStartDate:true})",
            @placeholder = "签发日期"
        })

  这样也可以通过该注解来控制日期显示格式。

  第四种,如果界面上要求使用@Html.TextboxFor来显示的话,如下:

    

    @Html.TextBoxFor(m => m.RemittanceDate, new { @class = "form-control validate[required]", onFocus = "WdatePicker({startDate:‘%y-%M-01‘,dateFmt:‘yyyy-MM-dd‘,alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })

,则以上两个注解的格式控制都不起作用,这时候,也有三种解决方法,如下:

    ①使用@Html.TextBoxFor的重载函数,其中一个是有string format参数的,如下:

      

  @Html.TextBoxFor(m => m.RemittanceDate, "{0:yyyy-MM-dd}", new { @class = "form-control validate[required]", onFocus = "WdatePicker({startDate:‘%y-%M-01‘,dateFmt:‘yyyy-MM-dd‘,alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })

    ②使用如下方法也可以:

    

@Html.TextBoxFor(m => m.RemittanceDate, new { @class = "form-control validate[required]", Value = String.Format("{0:yyyy-MM-dd}", Model.RemittanceDate), onFocus = "WdatePicker({startDate:‘%y-%M-01‘,dateFmt:‘yyyy-MM-dd
‘,alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })

    ③以下也是类似方式:

    

          @Html.TextBoxFor(c => c.IssueDate, new
        {
            @class = "form-control",
            Value = Convert.ToDateTime(Model.ShipBeginTime).ToString("yyyy-MM-dd HH:mm:ss"),
            onFocus = "WdatePicker({dateFmt:‘yyyy-MM-dd HH:mm:ss‘,alwaysUseStartDate:true})",
            @placeholder = "签发日期"
        })

    以上第③中方法,要注意,一定要加上Convert.ToDateTime()转换成时间类型,否则后面的ToString(string format)函数会报说不存在带有一个参数的重载,这是因为ToString()函数是积累Object的通用函数,DateTime类型重载了该方法,

DateTime类型的ToString()方法可以带一个参数也可以不带,所以要强制转换成DateTime类型才能使用ToString(string format)函数格式化。

  以上是使用MS 的Mvc,如果是传统的WebForm的话,使用<%#Eval("PA_STATUS")%>这种方式绑定值的话,Eval()也是有重载函数带有格式化参数可以控制显示格式的,不过WebForm我记得有时候要使用Eval,有时候要使用DataBind()

函数的,具体忘了,有知道的希望可以在评论那里告知,谢谢!

  
时间: 2025-01-06 03:59:05

.net视图中日期格式化的相关文章

Java中日期格式化YYYY-DD的坑

摘自:https://www.cnblogs.com/tonyY/p/12153335.html Java中日期格式化YYYY-DD的坑 2020-01-05 19:27  兔子托尼啊  阅读(115)  评论(0)  编辑  收藏 写这篇博文是记录下跨年的bug.去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误. 当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据. 今天逛技术论论坛正好遇到Java日期的操作bug. 1 yyyy 和 YYYY

Java中日期格式化的实现算法

package com.study.test; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.*; /** * 实现Java中日期的简单格式化,支持以下字段: * yyyy:年 * MM:月 * dd:日 * hh:1~12小时制(1-12) * HH:24小时制(0-23) * mm:分 * ss:秒 * S:毫秒 * E:星期几 * a: 上午/下午 */ public cla

Angular2日期格式化

一.ts中调用 1.引入:import { DatePipe } from '@angular/common'; 2.加入构造函数: constructor( private http: Http, private alertService: AlertService, private datePipe: DatePipe, ) { } 3.方法中调用 let dateStr:string = this.datePipe.transform(data.detailList[i].checkDat

spingmvc 返回json数据日期格式化方法

第一种: json 用的是这个依赖 <!-- JSON lib 开发包 以及它的依赖包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.0</version> </dependency> 在springmvc返回j

thymeleaf中的日期格式化

本篇介绍些thymeleaf中的日期格式化的方法: 1.用#dates.format来解决: <span th:text="${#dates.format(user.date, 'yyyy-MM-dd')}">4564546</span> 或者<span th:text="${#dates.format(billingForm.startTime,'yyyy-MM-dd HH:mm:ss')}">4564546</span&

JSP中利用JSTL标签对日期格式化

数据库:Mysql 开发语言:JAVA 页面类型:JSP 对Mysql中的日期类型格式化,在JSP中,如何办呢,很多人说在JAVA后台去日期格式化,无奈了,于是找到了比较靠谱的答案 需要先引入JSTL库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 其次对JSP输出的日期进行格式化 <span>发布时间:<fmt:formatDate value=&qu

JSON中的日期格式化

Json字符串中的日期格式化函数 ConvertJsonDate: function (jd) { var d = new Date(parseInt(jd.replace("/Date(", "").replace(")/", ""), 10)); if (d.toString().split("-").length > 1) { return d; } var month = { "Ja

python中时间日期格式化符号

python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M

MS SQL Server中的CONVERT日期格式化大全

CONVERT 函数将某种数据类型的表达式显式转换为另一种数据类型.SQL Server中 将日期格式化. SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式. 在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值.给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy). 不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输入/输出** - 0 或 100 (*) 默认值 mon dd yyyy hh: