【问题标题】:Crystal Report DateTime field shows one day less than it shouldCrystal Report DateTime 字段显示比应有的时间少一天
【发布时间】:2013-12-11 06:58:03
【问题描述】:

我对提交的 Crystal Reports 日期时间有疑问。当它托管在澳大利亚服务器(操作系统:Windows Server 2003 R2)上时,它在报告上显示的时间比应有的少一天。但如果它位于本地(在斯里兰卡)(操作系统:Win 7),它可以正常工作。

相关的 DataSet 返回正确的日期,但带有时间部分 ex : “11/08/2013 12:00 A.M”,在这种情况下,如果报告在澳大利亚服务器上,它将显示“10AUG2013”​​,如果在斯里兰卡托管,则显示“11AUG2013”​​。

我确实尝试使用公式字段并对其进行格式化以忽略时间部分 ex:CDate()、ToText() 等,但由于某些未知原因它认为澳大利亚服务器上的日期为 -1 :)

一种解决方法是使用 DataSet 获取格式化字符串,但我想找出此问题的根本原因并尝试解决它。

我希望我已经清楚地解释了这个问题,并希望对此有所了解。

提前致谢, 干杯

【问题讨论】:

    标签: .net datetime crystal-reports timezone dataset


    【解决方案1】:

    这不是水晶报表问题;这是一个数据集问题。

    Remoted DateTime values in a DataSet object are converted to the equivalent local time of a remote computer that is in a different time zone

    文章很好地解释了,如果存储数据的时区和使用它们的时区不同,您可能会遇到这个问题。

    您可以尝试多种解决方法(即删除时间部分并为每个日期添加 1 天),但最好的解决方案是为两台服务器设置相同的时区(时区不必是服务器所在的位置但是用户应该在哪里!)

    【讨论】:

      【解决方案2】:

      您可能想要使用ShiftDatetime 函数。

      // shift from India Standard Time (IST) to Australian Eastern Standard Time (AEST)
      // IST doesn't have a daylight time; omitted
      // daylight time support added for AEST
      ShiftDateTime({table.date_time}, "IST,330", "AEDT,600,AEDT,60")
      

      【讨论】:

      • 谢谢克雷格,我能够通过您的提示找到解决方案 ShiftDateTime({Table.DepartureDate},"UTC,0", "") 解决了我的问题。参考:taf-tech.blogspot.com/2008/04/…
      【解决方案3】:

      最初,带有水晶报告的 ShiftDateTime 函数对我有用,直到我发现英国环境存在一些问题,因为它们接近 GMT。后来我对此做了进一步的调查,Emanuelle 是对的,这是由于数据集问题。 问题的根本原因是,它在序列化数据集时添加了时间偏移。默认情况下,数据集日期时间字段的 DateTimeMode 为“UnspecifiedLocal”,它创建了偏移量。我只需将其更改为“未指定”以避免它与偏移量一起序列化。

      例如:

      foreach DataTable dtbl in dataset.Tables)
      
                  {
                      foreach (DataColumn col in dtbl.Columns)
                      {
                          if (col.DataType == System.Type.GetType("System.DateTime"))
                          {
                              col.DateTimeMode = DataSetDateTime.Unspecified;
                          }
                      }
                  }`
      

      (参考:http://msdn.microsoft.com/en-us/library/system.data.datasetdatetime(v=vs.100).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-22
        • 2011-07-24
        相关资源
        最近更新 更多