标签: datetimeoffset

是否可以使用Json.NET将DateTimeOffset序列化为zulu时间字符串?

我有一个DateTimeOffset对象"05/06/2014 05:54:00 PM -04:00".

使用Json.NET和ISO设置进行序列化时,我得到"2014-05-06T17:54:00-04:00".

我想要的是该字符串"2014-05-06T21:54:00Z"的UTC/Zulu版本.

但是,我找不到任何序列化程序设置来实现此目的.我知道对于DateTime序列化,我可以设置DateTimeZoneHandling = DateTimeZoneHandling.Utc以具有Zulu格式.但是,DateTimeOffset没有这样的设置选项.我错过了什么吗?或者我是否必须为此创建自定义覆盖?

c# datetimeoffset json.net

10
推荐指数
2
解决办法
7539
查看次数

System.FormatException:JSON 值不是受支持的 DateTimeOffset 格式

我正在阅读这篇关于 DateTime 相关格式支持的 MSDocs 文章 https://learn.microsoft.com/en-us/dotnet/standard/datetime/system-text-json-support#support-for-the-iso-8601- 12019-格式

我试图弄清楚默认配置没有按预期工作,或者我一定错过了一些东西。

我是说:

DateTimeOffset.Parse("2021-03-17T12:03:14+0000");
Run Code Online (Sandbox Code Playgroud)

效果很好。

JsonSerializer.Deserialize<TestType>(@"{ ""CreationDate"": ""2021-03-17T12:03:14+0000"" }");
Run Code Online (Sandbox Code Playgroud)

没有。

例子:

using System;
using System.Text.Json;
using System.Threading.Tasks;


namespace CSharpPlayground
{
    public record TestType(DateTimeOffset CreationDate);
    
    public static class Program
    {
        public static void Main()
        {
            var dto = DateTimeOffset.Parse("2021-03-17T12:03:14+0000");
            Console.WriteLine(dto);

            var testType = JsonSerializer.Deserialize<TestType>(@"{ ""CreationDate"": ""2021-03-17T12:03:14+0000"" }");
            Console.WriteLine(testType.CreationDate);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出以下异常:

System.Text.Json.JsonException: The JSON value could not be converted to CSharpPlayground.TestType. Path: $.CreationDate | LineNumber: 0 | BytePositionInLine: 44.
 ---> System.FormatException: The JSON …
Run Code Online (Sandbox Code Playgroud)

.net c# json datetimeoffset system.text.json

10
推荐指数
1
解决办法
1万
查看次数

C#将datetimeoffset转换为字符串,以毫秒为单位

datetimeoffset中的默认toString()方法将时间转换为字符串格式,但会丢失毫秒.反正有没有保留它?

c# datetime datetimeoffset

8
推荐指数
2
解决办法
2万
查看次数

asp.net datetime 随机重复时间偏移。是一个错误?

我有一个用 asp.net 4 和 sql server 2008 R2 开发的网站。问题非常复杂。我在数据库中有一个字段,数据时间偏移量为 UTC(例如 2015-09-30 18:24:53.1498113 +02:00)。随机(我认为当应用程序池重新启动时)这个值在 .net 中查询后返回损坏,如下所示:30/09/2015 18:21:00 +02:00 +02:00 时间偏移重复 2 次!

因此,当我在 c# 中解析日期时,显然我收到一个错误“字符串未被识别为有效的日期时间”。

如果我回收池应用程序页面工作正常

为什么?这是一个错误?你见过类似的问题吗?

非常感谢

asp.net datetime datetimeoffset

8
推荐指数
2
解决办法
1224
查看次数

从DateTimeOffset中删除时区偏移量

DateTimeOffset testDateAndTime =
    new DateTimeOffset(2008, 5, 1, 8, 6, 32, new TimeSpan(1, 0, 0));

//CLEAN TIME AND DATE 
testDateAndTime = testDateAndTime.DateTime.Date; 

var datesTableEntry = db.DatesTable.First(dt => dt.Id == someTestId);
datesTableEntry.test= testDateAndTime;

db.SaveChangesAsync(); 
Run Code Online (Sandbox Code Playgroud)

结果数据库: 2008-05-01 00:00:00.0000000 -04:00

如何(在保存之前从代码中-4:00转换+00:00)?

我试过了:

public Task<DateTimeOffset> SetTimeZoneOffsetToZero(DateTimeOffset dateTimeOffSetObj)
{
    TimeSpan zeroOffsetTimeSpan = new TimeSpan(0, 0, 0, 0, 0);
    return dateTimeOffSetObj.ToOffset(zeroOffsetTimeSpan);
}
Run Code Online (Sandbox Code Playgroud)

它没有做任何事情.

最终目标只是拥有一个没有时间或时区偏移的日期.我不想将时间转换为另一个时区(即我不希望它从testDateAndTime时间减去4小时并删除设置时间偏移00:00:00.0000000,我只是想将它设置为偏移+00:00).我想要当前日期,零偏移.

编辑:

以下是其他地方的建议:

DateTimeOffset testDateAndTime =
    new DateTimeOffset(2008, 5, 1, 8, 6, 32, new …
Run Code Online (Sandbox Code Playgroud)

c# timezone datetimeoffset

8
推荐指数
1
解决办法
1万
查看次数

如何设置柏林时区的 ZoneOffset

我得到的LocalDateTime时间比实际时间少了两个小时。如何使用以下代码获取德国柏林的偏移时间?

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss", Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)

java timezone datetime datetimeoffset java-time

8
推荐指数
1
解决办法
2万
查看次数

"TIMESTAMP WITH TIME ZONE"< - > DateTImeOffset映射不会在INSERT命令(Entity Framework + Oracle)上提供Zone部分

我使用EF(EDMX模型 - 数据库优先)将"TIMESTAMP WITH TIME ZONE"映射到DateTimeOffset.当我将DateTimeOffset提交给Oracle时,区域部分保存不正确.

因此,如果使用模型,例如,插入值29/02/2012 10:10:10 +04:00,实际存储在Oracle中的值是29/02/2012 10:10:10 +02:00(假设+02:00是本地区域)请注意,查询数据时映射的工作正常.只有INSERT(通过ObjectContext.SaveChanges())被破坏了......

我调试了"Oracle.DataAccess.dll"(使用ILSpy :))并发现EF的映射代码省略了区域("Oracle Data Provider"仅传递DateTimeOffset.DateTime).

有没有人知道解决方法?

在此先感谢Eli

BTW:我使用的是.net4,EF4,Oracle 11g,ODAC 11.2第4版(11.2.0.3.0)

oracle timestamp entity-framework zone datetimeoffset

7
推荐指数
1
解决办法
1923
查看次数

本地和服务器时间之间存在差异

在MVC4 C#应用程序中,我DateTime.Now在我的应用程序中创建对象时使用.部署后,本地计算机与托管之间存在+8小时的差异.然后我改变它DateTime.UtcNow,现在差异是-4小时.

例如在我的计算机日期是20 Mar 2013, 14:28:12,但日期存储到数据库之类的20 Mar 2013, 10:28:12.

我应该为所有国家的所有用户使用同一个日期做什么?

编辑:我的时区是(UTC + 04:00)巴库,服务器正在关注PST

c# timezone datetime utc datetimeoffset

7
推荐指数
1
解决办法
1万
查看次数

如何正确使用Timezone?

我正在阅读很多关于时区,偏移,utc,当地时间,javascript函数,DST,培根的内容,而我正试图将这些内容整合在一起,为我的应用程序构建一个可靠/正确的结构.

假设我的应用程序类似于StackOverflow.

这就是我在做的......

  • 服务器在另一个国家/地区,因此我将其设置为UTC 00:00.
  • 我把日期存储为DateTimeOffset.
  • 不是要存放TimeZoneID.
  • 日期以这种格式发送给客户:2012-07-19T14:30:00-03:00.
  • 我正在使用角度过滤器将其转换为当地时间.

我有几个问题......

1º服务器TimeZone?

关于我的服务器(单个服务器)......它应该以"中性"UTC(+00:00)运行吗?如果将来我们迁移到服务器在不同位置运行的服务器场,该怎么办?

2º我应该存储什么?

目前,我正在将日期存储为DateTimeOffset.我正在阅读关于保存的内容,TimeZoneID但我认为没有任何用处.我错过了什么吗?

或者我应该像DateTimeUtca 一样存储日期TimeZoneID并手动转换每个日期与TimeZone班级?

3º如何转换为当地时间?

在客户端上转换数据是否安全?或者日期转换应该始终在服务器端?

4º关于夏令时.

使用我目前的方法.DST会受到尊重吗?

javascript c# timezone utc datetimeoffset

7
推荐指数
1
解决办法
1160
查看次数

如何在 PostreSQL 中存储 DateTimeOffset

我在DateTimeOffset使用实体框架从 PostgreSQL 数据库检索 a 时遇到问题。就研究问题而言,我发现这篇文章可以帮助我了解问题所在,但我无法弄清楚如何解决它。

我有一个允许用户上传文件(主要是图像)的 API,它提取图像的拍摄日期并将其存储在数据库中。它在大多数情况下都很好用。但是,如果日期在 2007 年之前的 3 月 11 日到 4 月的某个时间(日期因年份而异),它会很好地保存到数据库中,但是在尝试检索该行时,它会抛出错误:

本地 dateTime 参数的 UTC 偏移量与偏移参数不匹配。

Timestamp With Time Zone在 postgreSQL 中使用该CameraDate字段的类型。我不知道如何让它正常工作。如果有一种方法可以在不更改数据库的情况下做到这一点,那将是可取的。

例子:

2001-04-01 10:47:17-06 Works
2001-03-01 10:47:17-06 Works
2001-03-13 10:47:17-06 Doesn't work
2007-03-13 10:47:17-06 Works
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

Context.Files.Add(file);
Context.Entry(file).Reload();
Run Code Online (Sandbox Code Playgroud)

文件类如下所示(为简洁起见,删除了一些字段):

public class File
{
    [Column("FileId")]
    public override Guid ID { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DisplayId { get; set; }
    public DateTimeOffset? CameraDate { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# postgresql entity-framework datetimeoffset

7
推荐指数
1
解决办法
7081
查看次数