标签: datetimeoffset

DateTimeFormatter 的模式问题

我正在编写一个股票程序,它(到目前为止)通过这样的请求从“Markit on Demand”获取数据:

http://dev.markitondemand.com/Api/v2/Quote/xml?symbol=aapl

这将返回 xml 中的数据,以及股票的各种度量(符号、名称、最后价格、变化、时间戳等)。

我在 Java 8 中创建 DateTimeFormatter 来制作时间戳时遇到问题。

时间戳的一个示例:

Fri Jul 18 15:59:00 UTC-04:00 2014

到目前为止,我拥有的模式如下:

EEE MMM d HH:mm:ss OOOO yyyy

我相信你们中的一些人可以发现,我在偏移方面遇到了麻烦。

从文档:

偏移量 X 和 x:这根据模式字母的数量格式化偏移量。一个字母只输出小时,例如“+01”,除非分钟不为零,在这种情况下也会输出分钟,例如“+0130”。两个字母输出小时和分钟,没有冒号,例如“+0130”。三个字母输出小时和分钟,带一个冒号,例如“+01:30”。四个字母输出小时和分钟以及可选的秒,没有冒号,例如“+013015”。五个字母输出小时和分钟以及可选的秒,带有冒号,例如“+01:30:15”。六个或更多字母抛出 IllegalArgumentException。当要输出的偏移量为零时,模式字母 'X'(大写)将输出 'Z',而模式字母 'x'(小写)将输出 '+00', '

Offset O:根据模式字母的数量格式化本地化的偏移量。一个字母输出本地化偏移量的缩写形式,即本地化偏移量文本,例如“GMT”,小时不带前导零,可选的两位数分钟和秒(如果非零)和冒号,例如“GMT+8” '。四个字母输出完整形式,它是本地化的偏移文本,例如'GMT,带有两位数的小时和分钟字段,可选的第二个字段(如果非零)和冒号,例如'GMT+08:00'。任何其他字母计数都会引发 IllegalArgumentException。

偏移 Z:这会根据模式字母的数量格式化偏移量。一、二或三个字母输出小时和分钟,不带冒号,例如“+0130”。当偏移量为零时,输出将为“+0000”。四个字母输出局部偏移的完整形式,相当于Offset-O的四个字母。如果偏移为零,则输出将是相应的本地化偏移文本。五个字母输出小时、分钟,如果非零,可选秒,带冒号。如果偏移为零,则输出“Z”。六个或更多字母抛出 IllegalArgumentException。

// String rawDate = Fri Jul 18 15:59:00 UTC-04:00 2014   
DateTimeFormatter PARSER_PATTERN = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss 'UTC'XXX yyyy");
ZonedDateTime timeStamp = ZonedDateTime.parse(rawDate, PARSER_PATTERN);
Run Code Online (Sandbox Code Playgroud)

这有效,但我很好奇为什么(代替'UTC'XXX)OOOO不起作用。

java datetimeoffset java-8 java-time datetimeformatter

6
推荐指数
1
解决办法
2149
查看次数

在 jTDS 中使用 datetimeoffset 数据类型

jTDS 当前不支持datetimeoffsetSQL Server 2008 中引入的数据类型。

任何人都可以建议是否有办法将datetimeoffset类型与 jTDS一起使用?

sql-server jtds jdbc datetimeoffset sql-server-2008

6
推荐指数
1
解决办法
943
查看次数

在SQL Server 2005数据库中存储ac#DateTimeOffset值

我想在SQL Server 2005数据库中存储aac#DateTimeOffset值.

Sql 2008将此作为内置类型,但SQL Server 2005没有.

DateTimeOffset结构具有DateTime值,我将其存储为DateTime,一个Offset属性(TimeSpan类型).由于这是相对于UTC的时区,因此可能通常是整数小时或半小时.

关于如何最好地将其存储在SQL Server 2005数据库中的建议?

c# sql-server-2005 datetimeoffset

5
推荐指数
1
解决办法
4357
查看次数

将 datetimeoffset 数据类型转换为 datetime 数据类型导致值超出范围

使用SQL Server 2008.I有一个表叫用户具有列LastLogindatadatetimeoffset数据类型

以下查询适用于生产服务器,但不适用于复制服务器。

select top 10 CAST(LastLoginDate AS DATETIME)  from User.
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。将 datetimeoffset 数据类型转换为 datetime 数据类型导致值超出范围。

谢谢

sql-server datetimeoffset

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

Log4Net中的DateTimeOffset

什么是log4net.Layout.PatternLayout值以将DateTimeOffset数据类型输出到数据库?

这是我目前在log4net的配置文件中所拥有的:

<log4net>
....
<parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</parameter>
...
</log4net>
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

<log4net>
....
<parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTimeOffset" />
      <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff **OFFSET**}" />
</parameter>
...
</log4net>
Run Code Online (Sandbox Code Playgroud)

基本上我们重用相同的数据库来记录位于不同时区的客户端的事件 - 所以我们想知道事件的确切本地时间.

谢谢,亚历克斯

log4net datetimeoffset

5
推荐指数
1
解决办法
1935
查看次数

C#和SQL Server中的DateTimeOffset分辨率

文档指出,在.NET和SQL Server中,分辨率均为100ns。

DateTimeOffset值的时间分量以100纳秒单位(称为刻度)进行度量 -C# 精度-100纳秒 -SQL Server

但是SQL似乎删除了最后一位数字(例如,我试图保存2013-08-15 09:19:07.2459675 -04:00,SQL保存2013-08-15 09:19:07.2459670 -04:00-通知最后一位数字发生变化。)

这发生在同一台计算机上,因此与硬件无关。

并不是我真的需要这个解决方案,但是它使比较日期变得更加困难..我很好奇。

.net c# time-precision datetimeoffset sql-server-2008

5
推荐指数
1
解决办法
8452
查看次数

仅更改SQL中datetimeoffset的时间部分

如何只设置SQL datetimeoffset变量的时间部分?

例如:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00'
Run Code Online (Sandbox Code Playgroud)

我想计算另外两个datetimeoffsets:

@startdate should be '2014-01-11 00:00:00 +02:00'
@enddate should be '2014-01-12 00:00:00 +02:00'
Run Code Online (Sandbox Code Playgroud)

但我尝试的所有解决方案都将偏移设置为零.

注意:我需要结果中的原始偏移量,因为我需要将它们与表中的某些datetimeoffset列进行比较.所以只是投射到一个日期是行不通的.

进一步说明:在SQL2012中这很容易; 我可以使用DATETIMEOFFSETFROMPARTS.不幸的是,我目前无法升级到2012.例:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7);
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server datetimeoffset sql-server-2008

5
推荐指数
2
解决办法
2454
查看次数

QuickBooks Web连接器时间修改的偏移量不占夏时制时间

我正在使用QuickBooks Web Connector使用QBXML请求将员工记录从Windows 8.1计算机上的QuickBooks Desktop中拉出。是否有原因导致TimeModified时间戳返回的偏移量不占夏时制时间的原因?有没有一种方法可以获取主机系统上的当前时间?

即使当前时区已设置为“东部时间”并启用了“调整夏令时”,当前仍为TimeModified返回“ 2014-03-27T14:20:53-05:00”。偏移量应为-04:00。

QBXML请求:

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="12.0"?>
<QBXML>
  <QBXMLMsgsRq onError="stopOnError">
    <EmployeeQueryRq metaData="MetaDataAndResponseData">
      <OwnerID>0</OwnerID>
    </EmployeeQueryRq>
  </QBXMLMsgsRq>
</QBXML>
Run Code Online (Sandbox Code Playgroud)

quickbooks qbxml datetimeoffset dst qbwc

5
推荐指数
1
解决办法
382
查看次数

ZoneOffset 的 ID 无效

我正在尝试从 to 转换java.sql.timestampOffsetDateTime以便我可以ISO8601在我的 rest api 中返回标准字符串。我正在使用此代码转换timestampOffsetDateTime

public static OffsetDateTime sqlTimetampeToOffsetDateTime(Timestamp ts, String timeZone)
{
    if (ts == null)
    {
        return null;
    }

    Calendar cal = Calendar.getInstance();
    cal.setTime(ts);
    ZoneOffset offset = ZoneOffset.of(timeZone);
    return OffsetDateTime.of(
            cal.get(Calendar.YEAR),
            cal.get(Calendar.MONTH)+1,
            cal.get(Calendar.DAY_OF_MONTH),
            cal.get(Calendar.HOUR_OF_DAY),
            cal.get(Calendar.MINUTE),
            cal.get(Calendar.SECOND),
            cal.get(Calendar.MILLISECOND)*1000000,
            offset);
}
Run Code Online (Sandbox Code Playgroud)

但是,代码在ZoneOffset offset = ZoneOffset.of(timezone)for value处失败Europe/Copenhagen

我使用以下代码打印所有时区的列表,我确实Europe/Copenhagen在该列表中看到

    Set<String> allZones = ZoneId.getAvailableZoneIds();
    LocalDateTime dt = LocalDateTime.now();

    List<String> zoneList = new ArrayList<String>(allZones);
    Collections.sort(zoneList);

    for (String s …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp date datetimeoffset java-8

5
推荐指数
2
解决办法
7200
查看次数

Json.NET对没有时区的DateTimeOffset.MinValue进行反序列化DateTimeOffset值失败

在我的ASP.NET Core Web-API项目中,我正在对我的一个API控制器进行HTTP POST调用。

在评估JSON有效负载并反序列化其内容时,Json.NET偶然发现DateTime值为,0001-01-01T00:00:00并且无法将其转换为DateTimeOffset属性。

我注意到该值大概应该代表DateTimeOffset.MinValue的值,但是缺少时区似乎会使解串器崩溃。我只能想象DateTimeOffset.Parse试图将其转换为主机当前时区,从而导致DateTimeOffset.MinValue下溢。

该属性非常简单:

[JsonProperty("revisedDate", NullValueHandling = NullValueHandling.Ignore)]
public DateTimeOffset? RevisedDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是发送给客户端的响应:

{
    "resource.revisedDate": [
        "Could not convert string to DateTimeOffset: 0001-01-01T00:00:00. Path 'resource.revisedDate', line 20, position 44."
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Newtonsoft.Json v11.0.2,目前使用的是UTC + 2(德国)。异常回溯和错误消息在这里:https : //pastebin.com/gX9R9wq0

我无法修复调用代码,因此必须在行的一侧进行修复。

但是问题是:如何?

c# datetimeoffset json.net deserialization asp.net-core-mvc

5
推荐指数
2
解决办法
2688
查看次数