日期服务器上.net中的时区问题

时间:2017-05-23 13:42:57

标签: c# .net datetime

我想在.net中解析字符串2017-06-02T00:00:00 + 05:30并获取日期时间值为2017-06-02:00:00:00。表示服务器正在将此日期转换为东部时区。但我想把它存放在给定的时区。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

由于您的输入包含时区偏移,并且您似乎要求DateTime .Kind == DateTimeKind.Unspecified,因此您无法使用DateTime.Parse或{{ 1}},至少在没有改变输入字符串的情况下。自定义格式化程序(DateTime.ParseExactK等)和zzz没有任何组合可以为您提供未指定类型的DateTimeStyles。他们总是会接受偏移,并假设您需要本地时间或UTC。

所以,你有一些选择。

  1. 在解析之前更改字符串,以截断偏移量。

    DateTime
  2. 解析为string s = "2017-06-02T00:00:00+05:30"; DateTime dt = DateTime.ParseExact(s.Substring(0, 19), "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture); ,然后选择DateTimeOffset属性。

    DateTime
  3. 就个人而言,我更喜欢选项2.您甚至可以考虑在整个过程中使用string s = "2017-06-02T00:00:00+05:30"; DateTimeOffset dto = DateTimeOffset.ParseExact(s, "yyyy-MM-dd'T'HH:mm:sszzz", CultureInfo.InvariantCulture); DateTime dt = dto.DateTime; 。它通常更适合大多数场景。

    另请注意,在以此格式解析字符串时,不变文化优于本地文化,因为定义此格式的ISO-8601规范始终使用公历日历系统。如果您使用其他文化,则可以解释不同日历系统中的数字,这可能会导致错误。

答案 1 :(得分:0)

我相信使用DateTimeOffset可以满足您的需求。

<script>
var item = document.getElementsByName("InsertRecordItemID")[0].value;
  
<!-- right here I need an if (item !== null) to then run the change function but that if it's not null to not run the change function{ -->
  
$("[name='cbParamVirtual9']").change(function(){

var itid = document.getElementsByName("cbParamVirtual9")[0].value;
document.getElementsByName("InsertRecordItemID")[0].value = itid;

}
);

</script>

答案 2 :(得分:-1)

Project -> Clean...