现在的位置: 首页 > 综合 > 正文

时间格式化

2013年04月18日 ⁄ 综合 ⁄ 共 4632字 ⁄ 字号 评论关闭

问:
首先,在数据写入数据库的时候,我用sql的getdate()直接将写入数据时的时间写到了数据库中。

然后,我将数据邦定到datalist,读出数据库中指定的某些数据项,这个时候我想要对时间进行格式的限制,比如写入的时间为2003-1-19 18:02:00,我需要显示的时间格式为2003-1-19。

如何实现??
______________________________________________________________________________________________
答1:
下面的示例演示用不变量 DateTimeFormatInfo 设定 DateTime 值的格式的不同方法。

[Visual Basic]
Option Explicit
Option Strict

Imports System
Imports System.Globalization

Public Class MainClass
   
    Public Shared Sub Main()
        Dim dt As DateTime = DateTime.Now
        Dim myformat() As String =  {"d", "D", _
                                    "f", "F", _
                                    "g", "G", _
                                    "m", _
                                    "r", _
                                    "s", _
                                    "t", "T", _
                                    "u", "U", _
                                    "y", _
                                    "dddd, MMMM dd yyyy", _
                                    "ddd, MMM d ""'""yy", _
                                    "dddd, MMMM dd", _
                                    "M/yy", _
                                    "dd-MM-yy"}
        Dim mydate As String
        Dim i As Integer
        For i = 0 To myformat.Length - 1
            mydate = dt.ToString(myformat(i), DateTimeFormatInfo.InvariantInfo)
            Console.WriteLine(String.Concat(myformat(i), " :", mydate))
        Next i

    ' Output.
    '
    ' d :08/17/2000
    ' D :Thursday, August 17, 2000
    ' f :Thursday, August 17, 2000 16:32
    ' F :Thursday, August 17, 2000 16:32:32
    ' g :08/17/2000 16:32
    ' G :08/17/2000 16:32:32
    ' m :August 17
    ' r :Thu, 17 Aug 2000 23:32:32 GMT
    ' s :2000-08-17T16:32:32
    ' t :16:32
    ' T :16:32:32
    ' u :2000-08-17 23:32:32Z
    ' U :Thursday, August 17, 2000 23:32:32
    ' y :August, 2000
    ' dddd, MMMM dd yyyy :Thursday, August 17 2000
    ' ddd, MMM d "'"yy :Thu, Aug 17 '00
    ' dddd, MMMM dd :Thursday, August 17
    ' M/yy :8/00
    ' dd-MM-yy :17-08-00
    End Sub 'Main
End Class 'MainClass
[C#]
using System;
using System.Globalization;

public class MainClass {
   public static void Main(string[] args)  {
       DateTime dt = DateTime.Now;
       String[] format = {
           "d", "D",
           "f", "F",
           "g", "G",
           "m",
           "r",
           "s",
           "t", "T",
           "u", "U",
           "y",
           "dddd, MMMM dd yyyy",
           "ddd, MMM d /"'/"yy",
           "dddd, MMMM dd",
           "M/yy",
           "dd-MM-yy",
       };
       String date;
       for (int i = 0; i < format.Length; i++) {
           date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);
           Console.WriteLine(String.Concat(format[i], " :" , date));
       }
 
  /** Output.
   *
   * d :08/17/2000
   * D :Thursday, August 17, 2000
   * f :Thursday, August 17, 2000 16:32
   * F :Thursday, August 17, 2000 16:32:32
   * g :08/17/2000 16:32
   * G :08/17/2000 16:32:32
   * m :August 17
   * r :Thu, 17 Aug 2000 23:32:32 GMT
   * s :2000-08-17T16:32:32
   * t :16:32
   * T :16:32:32
   * u :2000-08-17 23:32:32Z
   * U :Thursday, August 17, 2000 23:32:32
   * y :August, 2000
   * dddd, MMMM dd yyyy :Thursday, August 17 2000
   * ddd, MMM d "'"yy :Thu, Aug 17 '00
   * dddd, MMMM dd :Thursday, August 17
   * M/yy :8/00
   * dd-MM-yy :17-08-00
   */
   }
}

______________________________________________________________________________________________
答2:
这个我知道,问题是我从数据库中直接邦定的阿,显示的时候用的
<%# DataBinder.Eval(Container.DataItem, "updatatime") %>

但是这样就不能满足我的需要,我的意思就是取出数据的时候,对每个数据都有一个同样的格式的要求
______________________________________________________________________________________________
答3:
暂时有一个方案可以解决——

select convert(char(10),updatatime,126) as updatetime from Content order by Updatatime desc
______________________________________________________________________________________________
答4:
<%# databinder.Eval(Container.dataitem,"addtime","{0:d}") %>
______________________________________________________________________________________________
答5:
在数据库中制作一个自定义函数就行了:

CREATE FUNCTION ShortDateTime  (@DATE datetime)
RETURNS Varchar(11)
AS
BEGIN
 DECLARE @ShortDateTime Varchar(11)

 Set @ShortDateTime =  @ShortDateTime + Convert(varchar(4),Year(@DATE)) +  '-'

 if Month(@DATE) <10
  Set @ShortDateTime =  @ShortDateTime + '0' + Convert(varchar(1),Month(@DATE)) + '-'
 else
  Set @ShortDateTime =  @ShortDateTime + Convert(varchar(2),Month(@DATE)) + '-'

 if Day(@DATE)<10
  Set @ShortDateTime = '0' + Convert(varchar(1),Day(@DATE))
 else
  Set @ShortDateTime =  Convert(varchar(2),Day(@DATE))

   RETURN(@ShortDateTime)
END

使用的时候这样写就ok了
select  dbo.ShortDateTime(dbo.fcsF1Master.RequestedDate) as RequestedDate from fcsuser
______________________________________________________________________________________________
答6:
回楼上的,你的做法和我的临时解决方案有什么区别?都是将日期型转换为字符,这是我觉得不爽的地方
______________________________________________________________________________________________
答7:
<%# databinder.Eval(Container.dataitem,"addtime","{0:d}") %>

______________________________________________________________________________________________
答8:
能不能详细解释一下"{0:d}"的具体东西,也就是针对不同要求的格式限制。
 

抱歉!评论已关闭.