F#中的System.DateTime格式化

3

我有以下的F#代码:

let mutable argNum = 0
let cmdArgs = System.Environment.GetCommandLineArgs()

for arg in cmdArgs do
    printfn "arg %d : %s" argNum arg
    match argNum with
    | 1 -> pmID      <- System.Int32.Parse arg 
    | 2 -> startDate <- System.DateTime.Parse arg
    | 3 -> endDate   <- System.DateTime.Parse arg
    | _ -> ()
    argNum <- argNum + 1

对于日期参数,参数的格式为:"1-1-2011",即"M-D-YYYY"。 当我将日期写入XML序列化器时,得到以下格式:

1/1/2011 12:00:00 AM

我想完全删除时间部分。最好的方法是什么?
2个回答

4
这个怎么样?
(DateTime.Parse arg).ToString("MM-dd-yyyy")

非常接近。我现在得到了这个:"02-01-2011",如何去掉引号? - Ramy

3
默认情况下,DateTime实例使用“dateTime”数据类型进行序列化。您可以通过注释您的类型来改变它,使用“date”代替,这将以YYYY-MM-DD格式进行序列化 - 如果这对您不起作用,请仅序列化一个字符串,其中包含您选择的格式。
您可以像这样设置自定义序列化属性:
完整日期时间:[<XmlAttribute("start-date", DataType = "dateTime")>] 只有日期部分:[<XmlAttribute("start-date", DataType = "date")>] 示例:
[<Serializable>]
type DateTest() = 
  let mutable startDate = DateTime.Now
  [<XmlAttribute("start-date", DataType = "date")>]
  member x.StartDate with get() = startDate and set v = startDate <- v

问题是,我没有序列化一个名为“start-date”的属性。我正在序列化一个参数元素,在这种情况下,它具有一个start-date属性,但在其他情况下可能没有。 - Ramy

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