Tridion 如何为日期或数字类型的元数据字段赋值?

Tridion 如何为日期或数字类型的元数据字段赋值?,tridion,tridion-2011,core-services,Tridion,Tridion 2011,Core Services,我正在使用以下链接的代码来处理元数据字段:- 但是,当我尝试为日期类型的元数据字段赋值时,我得到了以下xml验证错误:- System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误。原因:“uuid:myUUID:dateField”元素无效-值“10/4/2012 03:04:00 AM”根据其数据类型无效http://www.w3.org/2001/XMLSchema:

我正在使用以下链接的代码来处理元数据字段:-

但是,当我尝试为日期类型的元数据字段赋值时,我得到了以下xml验证错误:-

System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误。原因:“uuid:myUUID:dateField”元素无效-值“10/4/2012 03:04:00 AM”根据其数据类型无效http://www.w3.org/2001/XMLSchema:dateTime“-字符串“10/4/2012 03:04:00 AM”不是有效的日期时间值。。故障细节等于 myPorject.serviceReference.CoreServiceFault

无论我是将值指定为string还是DateTime数据类型,我都会遇到相同的错误,我还尝试使用DateTime数据类型重载AddValue方法,但到目前为止没有任何效果

AddValue方法的代码段:-

     public void AddValue(string value1)
    {
        string value = string.IsNullOrEmpty(value1) ? null : value1; ;
        XmlElement newElement = fields.AddFieldElement(definition);
        if (value != null) newElement.InnerText = value;
    }

请建议日期和数字数据类型的解决方案。提前感谢

根据我的C经验,此类错误是由于日期时间格式问题造成的。 你可以试试下面的代码

DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");

我没有用你的代码测试它,但希望它能在你的情况下工作。

根据我的C经验,这种错误是由于日期时间格式问题造成的。 你可以试试下面的代码

DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");

我没有用您的代码测试它,但希望它能在您的情况下工作。

日期字符串的格式应如下所示:

YYYY-MM DDThh:MM:ss 例如:

2012-10-03T09:39:43 除此之外,您设置日期的方式对我来说似乎有点复杂,因为您使用的是内容和元数据包装器,为什么不这样做:

字符串myStringDate=2012-10-03T09:39:43; 字段[DateFieldName].Value=myStringDate; component.Metadata=fields.ToString;
日期字符串的格式应如下所示:

YYYY-MM DDThh:MM:ss 例如:

2012-10-03T09:39:43 除此之外,您设置日期的方式对我来说似乎有点复杂,因为您使用的是内容和元数据包装器,为什么不这样做:

字符串myStringDate=2012-10-03T09:39:43; 字段[DateFieldName].Value=myStringDate; component.Metadata=fields.ToString;
格式中日期和时间之间缺少“T”分隔符。您确实提到了输出的日期的格式是您尝试重新插入的格式,但是输出的任何内容都可以格式化,而不一定是您指定日期的方式


仔细阅读这里的XMLSchema日期时间规范:

格式中的日期和时间之间缺少“T”分隔符。您确实提到了输出的日期的格式是您尝试重新插入的格式,但是输出的任何内容都可以格式化,而不一定是您指定日期的方式


仔细阅读这里的XMLSchema日期时间规范:

错误消息非常明确,说明您的日期格式错误:字符串“10/4/2012 03:04:00 AM”不是有效的日期时间值

Tridion期望的格式为YYYY-MM-DDThh:MM:ss,因此没有空间、时区和AM/PM标记

在官方的TridionAPI中,您通常不必自己进行转换,因为它们接受DateTime对象并将其转换为正确的格式。但是,由于您使用的helper类不是官方API,因此它需要一些快捷方式,并使您将值设置为字符串


我通常使用datetime.ToStringu.Replace、T.ReplaceZ来获取正确格式的日期。

错误消息非常明确地表明您的日期格式错误:字符串“10/4/2012 03:04:00 AM”不是有效的日期时间值

Tridion期望的格式为YYYY-MM-DDThh:MM:ss,因此没有空间、时区和AM/PM标记

在官方的TridionAPI中,您通常不必自己进行转换,因为它们接受DateTime对象并将其转换为正确的格式。但是,由于您使用的helper类不是官方API,因此它需要一些快捷方式,并使您将值设置为字符串


我通常使用datetime.ToStringu.Replace、T.ReplaceZ以正确的格式获取日期。

经过一些故障排除,我终于解决了问题,并提供了日期格式。为此,我需要将本地机器的时区与服务器的时区相匹配

下面是重载方法的代码:-

      public void AddValue(DateTime value1)
    {
        DateTime value = value1 == null ? DateTime.MinValue : value1;

        XmlElement newElement = fields.AddFieldElement(definition);
        if (value != null) newElement.InnerText = value.ToString("yyyy-MM-ddThh:mm:ss");
    }

经过一些故障排除,我终于解决了这个问题,以及日期的格式。为此,我需要将本地机器的时区与服务器的时区相匹配

下面是重载方法的代码:-

      public void AddValue(DateTime value1)
    {
        DateTime value = value1 == null ? DateTime.MinValue : value1;

        XmlElement newElement = fields.AddFieldElement(definition);
        if (value != null) newElement.InnerText = value.ToString("yyyy-MM-ddThh:mm:ss");
    }

不,它与日期的格式无关,我已经尝试过了。@Ram:我通常使用datetime.ToStringu.Replace,T.ReplaceZ来获取正确格式的日期。感谢Frank的知识补充:-不,它与日期的格式无关,我已经尝试过了
这个。@Ram:I通常使用datetime.ToStringu.Replace,T.ReplaceZ,以正确的格式获取日期。感谢Frank提供知识补充:-我认为此问题与日期格式无关,因为如果我手动创建多媒体组件并预览其元数据字段,则日期字段在fromat中的值为mm/d/yyyy h:mm:ss tt,例如:-10/9/2012 5:11:54 PM,但如果我尝试以此格式分配日期甚至我也得到了同样的例外。预览以不同的格式显示日期的事实来自于模板代码以该格式输出的事实。在内部,它以T而不是空格存储,并以24小时格式而不是AM/PM存储。只要试一下Puntero的代码,你就会意识到他毕竟是对的。yyyy-MM-ddThh:MM:ssI认为这个问题与日期的格式无关,因为如果我手动创建一个多媒体组件并预览其元数据字段,那么日期字段在fromat中的值为MM/d/yyyy-h:MM:ss tt,例如:-10/9/2012 5:11:54 PM,但如果我尝试在这里分配日期格式,甚至我也得到了同样的例外。预览以不同的格式显示日期的事实来自于模板代码以该格式输出的事实。在内部,它以T而不是空格存储,并以24小时格式而不是AM/PM存储。只要试一下Puntero的代码,你就会发现他终究是对的。yyyy-MM-ddThh:MM:ssdatetime。ToString-yyy-MM-ddThh:MM:ss但是我真的很喜欢我变体中的魔法u。它发送给那些阅读API文档运行代码的人——或者这只是我的想象-yyyy-MM-ddThh:MM:ssdatetime.tostringyyy-MM-ddThh:MM:ss但是我真的很喜欢我的变体中的魔法u。它发送给那些阅读API文档运行代码的人——或者这只是我的想象-yyyy MM ddThh:MM:SS您只需要确保指定的时间在服务器的时区内。一种方法是将本地计算机设置为与服务器相同的时区,但肯定还有其他方法,例如,进行一些简单的时区计算,不需要更改计算机设置。yyyy-MM-ddTHH:MM:ss您只需要确保指定的时间在服务器的时区内。一种方法是将本地计算机设置为与服务器相同的时区,但肯定还有其他方法,例如,进行一些简单的时区计算,不需要更改计算机设置。yyy-MM-ddTHH:MM:ss