我有一个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没有这样的设置选项.我错过了什么吗?或者我是否必须为此创建自定义覆盖?
我正在阅读这篇关于 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) datetimeoffset中的默认toString()方法将时间转换为字符串格式,但会丢失毫秒.反正有没有保留它?
我有一个用 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# 中解析日期时,显然我收到一个错误“字符串未被识别为有效的日期时间”。
如果我回收池应用程序页面工作正常
为什么?这是一个错误?你见过类似的问题吗?
非常感谢
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) 我得到的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) 我使用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)
在MVC4 C#应用程序中,我DateTime.Now在我的应用程序中创建对象时使用.部署后,本地计算机与托管之间存在+8小时的差异.然后我改变它DateTime.UtcNow,现在差异是-4小时.
例如在我的计算机日期是20 Mar 2013, 14:28:12,但日期存储到数据库之类的20 Mar 2013, 10:28:12.
我应该为所有国家的所有用户使用同一个日期做什么?
编辑:我的时区是(UTC + 04:00)巴库,服务器正在关注PST
我正在阅读很多关于时区,偏移,utc,当地时间,javascript函数,DST,培根的内容,而我正试图将这些内容整合在一起,为我的应用程序构建一个可靠/正确的结构.
假设我的应用程序类似于StackOverflow.
这就是我在做的......
DateTimeOffset.TimeZoneID.2012-07-19T14:30:00-03:00.我有几个问题......
关于我的服务器(单个服务器)......它应该以"中性"UTC(+00:00)运行吗?如果将来我们迁移到服务器在不同位置运行的服务器场,该怎么办?
目前,我正在将日期存储为DateTimeOffset.我正在阅读关于保存的内容,TimeZoneID但我认为没有任何用处.我错过了什么吗?
或者我应该像DateTimeUtca 一样存储日期TimeZoneID并手动转换每个日期与TimeZone班级?
在客户端上转换数据是否安全?或者日期转换应该始终在服务器端?
使用我目前的方法.DST会受到尊重吗?
我在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)