数据工厂数据集时区处理

时间:2018-08-30 17:28:38

标签: c# datetime timezone azure-data-factory

当输入具有时区偏移量的CSV数据(在Blob存储中)时

2018-08-29T06:38:19 + 01:00

数据集的列具有区域性en-GB。

      {
        "name": "TransactionDateTime",
        "type": "Datetime",
        "culture": "en-gb"
      },

它以以下形式降落在ADLS中:

2018-08-29 05:38:19.0000000

即使输出数据集区域性为en-gb,看起来它也被解析为+1,然后写为UTC。

大多数情况下,我们将en-gb设置为数据工厂的默认值是en-us,这对我们来说不是明智的默认值。

数据工厂文档建议查看c#文档中的格式字符串,因此我认为它使用的是.net框架实现。

  

如果s不包含时区信息,则s的Kind属性   返回的DateTime对象是DateTimeKind.Unspecified。这种行为   可以使用DateTimeStyles.AssumeLocal标志更改,   返回其Kind属性为DateTimeKind.Local的DateTime值,或者   通过使用DateTimeStyles.AssumeUniversal和   DateTimeStyles.AdjustToUniversal标志,该标志返回DateTime值   其Kind属性为DateTimeKind.Utc。如果s包含时区   信息,时间将转换为本地时间,如有必要,并且   返回的DateTime对象的Kind属性设置为   DateTimeKind.Local。可以通过使用   DateTimeStyles.RoundtripKind标志不转换协调通用   时间(UTC)为本地时间,并将Kind属性设置为   DateTimeKind.Utc。

试图用C#进行复制,也许像这样:

var inputInBlobDate = "2018-08-29T06:38:19+01:00";

var outputInADLSDate = "2018-08-29 05:38:19.0000000"; 

CultureInfo culture = new CultureInfo("en-GB");

var parsed = DateTime.ParseExact(inputInBlobDate, "yyyy-MM-ddTHH:mm:ssK", culture, DateTimeStyles.AdjustToUniversal);

parsed.ToString("yyyy-MM-dd HH:mm:ss.fffffff").Dump(); //2018-08-29 05:38:19.0000000

我的理论是否正确,因为它被编写为UTC?

如果我们指定GB文化,我担心如何处理英国的夏季时间。除非以某种方式GB文化只是格式字符串,但我在任何CultureInfo中都看不到这样的格式字符串,所以我认为它不只是用于格式化。

0 个答案:

没有答案