将 Long 转换为 DateTime 从 C# 日期到 Java 日期

2024-05-19

我一直尝试用Java读取二进制文件,而二进制文件是用C#编写的。其中一些数据包含日期时间数据。

当 DateTime 数据写入文件(以二进制形式)时,它使用DateTime.ToBinary(); on C#.

为了读取 DateTime 数据,它将首先从字节转换为长数据,使用BitConverter.ToInt64(byte[], 0),然后使用再次将其从 long 转换为 DateTime 数据DateTime.FromBinary(long)。 (所有这些都是用 C# 编写的)。

假设从字节转换后的长数据是 =-8586803256090942249,转换为DateTime时,会返回 =2018 年 3 月 17 日 5:07:56 下午

现在,我尝试用 Java 读取该二进制文件。为了将字节数据转换为长数据,我使用以下代码:ByteBuffer.wrap(byte[]).order(ByteOrder.LITTLE_ENDIAN).getLong().

它将像 C# 一样返回精确的长数据值。但是当我尝试将其从长数据转换为 Java 中的 DateTime 时,使用Date date = new Date(long),它将返回 =5 月 6 日星期日 19:04:17 WIB 272097407反而。

你能帮我解决这个问题的正确解决方案是什么吗?有没有等价的DateTime.FromBinary()从 Java 中的 C# ?或者我的代码错误?非常感谢您的所有回答。


In Java:

    long fromBytes = -8586803256090942249L;

    // Mask out kind and ticks
    int kind = Math.toIntExact((fromBytes >> 62) & 0x3);
    long ticks = fromBytes & 0x3FFF_FFFF_FFFF_FFFFL;
    LocalDateTime cSharpEpoch = LocalDate.of(1, Month.JANUARY, 1).atStartOfDay();
    // 100 nanosecond units or 10^-7 seconds
    final int unitsPerSecond = 10_000_000;
    long seconds = ticks / unitsPerSecond;
    long nanos = (ticks % unitsPerSecond) * 100;
    LocalDateTime ldt = cSharpEpoch.plusSeconds(seconds).plusNanos(nanos);

    switch (kind) {
    case 0: // Unspecified
    case 2: // Local time
        System.out.println("Result LocalDateTime: " + ldt);
        break;

    case 1: // UTC
        OffsetDateTime utcDateTime = ldt.atOffset(ZoneOffset.UTC);
        System.out.println("Result OffsetDateTime in UTC: " + utcDateTime);
        break;

    default:
        System.out.println("Not a valid DateTimeKind: " + kind);
        break;
    }

Output:

结果本地日期时间:2018-03-17T10:07:56.383355900

编辑:号码是

一个 64 位有符号整数,以 2 位编码 Kind 属性 字段和 62 位字段中的 Ticks 属性。

Tetsuya Yamamoto 是正确的,因为ticks 属性表示自 0001/01/01 一天开始(午夜)以来经过的 100 纳秒间隔数。类型为 0(表示未指定)、1(表示 UTC)或 2(表示本地时间)。所以我分别屏蔽了种类和蜱虫。

尽管在你的例子中,种类是 2,这应该是本地时间,但看起来时间确实是 UTC 时间。这是打印的时间与您预计的印度尼西亚西部时间下午 5:07:56 一致的唯一方法。也许该数字是在时区设置为 UTC 的计算机上生成的。

要获取您所在时区的时间:

    ZoneId targetZone = ZoneId.of("Asia/Jakarta");
    ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC).withZoneSameInstant(targetZone);
    System.out.println("Converted to target time zone: " + zdt);

转换为目标时区:2018-03-17T17:07:56.383355900+07:00[亚洲/雅加达]

这与您在 C# 方面所说的一致。

PS 避免Date如果可以的话,请使用 Java 中的类,它早已过时且设计不佳,多年前已被替换java.time,现代 Java 日期和时间 API https://docs.oracle.com/javase/tutorial/datetime/(我当然在上面使用了它)。如果您确实需要Date对于您现在无法更改或不想更改的旧版 API,正如您在评论中已经指出的那样,转换如下:

    Instant inst = ldt.atOffset(ZoneOffset.UTC).toInstant();
    Date date = Date.from(inst);
    System.out.println(date);

默认时区亚洲/雅加达的 JVM 上的输出:

3 月 17 日星期六 17:07:56 WIB 2018

致谢:Andreas 在一个答案(下面的链接)中解释了 64 位数字的结构,并给出了文档的链接。我把它们从那里带走了。

Links

  • DateTime.FromBinary(Int64) 方法 https://learn.microsoft.com/en-us/dotnet/api/system.datetime.frombinary?view=net-5.0来自 .NET 文档
  • 安德烈亚斯对重复问题的回答 https://stackoverflow.com/a/65316086/5772882
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Long 转换为 DateTime 从 C# 日期到 Java 日期 的相关文章

  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • 源代码管理无法启动手动合并工具,为什么?

    我曾经执行过tf 合并 Alpha Dev Alpha Main recursive从命令提示符将更改从 Dev 分支合并到 Main 分支 在发生冲突时 它会显示 解决冲突 窗口 我们可以通过选择选项手动解决冲突在合并工具中合并更改 直到
  • 如何在 Eclipse 下载站点上查找哪些功能包含所需的插件

    在针对目标平台开发 RCP 应用程序时 我 和别的 https stackoverflow com questions 10001143 eclipse rcp target platform bundle org eclipse ui v
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 我可以将更大的字体文本添加到 https://portal.azure.com 仪表板上的 Markdown 小部件吗?

    In https portal azure com https portal azure com我想制作一个带有大标签的仪表板 我们的想法是 我们可以在大电视上获取统计数据 这样我们就可以一目了然地看到我们的服务状态 大厂牌会成功的更容易消
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • SQL服务器超时

    我的应用程序是在经典 asp 上开发的 但也使用 asp net 因为我正在将应用程序迁移到 Net 上 它使用 SQL Server 作为数据库并托管在 Windows Server 2003 上 现在的问题是应用程序在很长一段时间内继续
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • EC2专用实例是否共享RAM带宽?

    如果我创建一个专用实例并且它在多芯片服务器上启动 它是否共享其自己的 CPU 的 RAM 带宽 如果邻居运行一些消耗内存带宽的任务会发生什么 它会影响我的实例吗 这在共享实例上怎么样 RAM有哪几种寻址方式 仅在其自己的 numa 节点上还
  • 如何手动发送django异常日志?

    我的应用程序中有一个应该返回的特定视图HttpResponse 如果一切都成功完成并且类似HttpResponseBadRequest 否则 此视图适用于外部数据 因此可能会引发一些意外的异常 我当然需要知道发生了什么 所以我有这样的东西
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • CSS - div 与父 div 底部对齐(内联块)

    我知道这个 html 很草率 有一些不必要的额外 div 但无论如何 我无法理解为什么 ID 为 info box right 的 div 与父 div 的底部对齐 您可以看到 文本 与下面的 jsfiddle 示例的底部 有什么想法可以让
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首