如何将 Google proto 时间戳转换为 Java LocalDate?

2024-04-29

我们需要将 Google Protobuf 时间戳转换为正常日期。在这种情况下,有没有办法将 Google Proto 缓冲区时间戳转换为 JavaLocalDate直接地?


tl;dr

作为 UTC 时刻,转换为java.time.Instant。然后应用时区以获得ZonedDateTime。将仅日期部分提取为LocalDate.

单线:

Instant
.ofEpochSecond( ts.getSeconds() , ts.getNanos() ) 
.atZone( ZoneId.of( "America/Montreal" ) ) 
.toLocalDate() 

Convert

第一步是转换Timestamp https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Timestamp对象的秒数和小数秒(纳秒)java.time类。具体来说,java.time.Instant https://docs.oracle.com/javase/10/docs/api/java/time/Instant.html。就像Timestamp, an Instant表示 UTC 中的一个时刻,分辨率为纳秒。

Instant instant =  Instant.ofEpochSecond( ts.getSeconds() , ts.getNanos() ) ;

确定日期需要时区。对于任何特定时刻,全球各地的日期都会因地区而异。

Apply a ZoneId to our Instant得到一个ZonedDateTime。同一时刻,时间轴上的同一点,不同的挂钟时间。

ZoneId z = ZoneId( "Pacific/Auckland" ) ; 
ZonedDateTime zdt = instant.atZone( z ) ;

将仅日期部分提取为LocalDate. A LocalDate没有时间和时区。

LocalDate ld = zdt.toLocalDate() ;

注意:做not use LocalDateTime用于此目的的类,不幸的是,如另一个答案所示。该类故意缺少任何时区或与 UTC 的偏移量的概念。因此它不能代表一个时刻,也不是时间线上的一个点。请参阅类文档。

Convert

最好完全避免非常麻烦的遗留日期时间类,包括Date, Calendar, SimpleDateFormat。但是,如果您必须与尚未更新的旧代码进行互操作java.time您可以来回转换。调用添加到旧类中的新转换方法。

GregorianCalendar gc = GregorianCalendar.from( zdt ) ;

将仅日期值表示为GregorianCalendar我们必须指定一天中的时间和时区。您可能希望使用一天中的第一时刻作为一天中的时间部分。永远不要假设第一时刻是 00:00:00。夏令时等异常意味着第一个时刻可能是另一个时间,例如 01:00:00。让java.time确定第一时刻。

ZonedDateTime firstMomentOfDay = ld.atZone( z ) ;
GregorianCalendar gc = GregorianCalendar.from( firstMomentOfDay ) ;


About java.time

The java.time http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/javase/10/docs/api/java/util/Date.html, Calendar https://docs.oracle.com/javase/10/docs/api/java/util/Calendar.html, & SimpleDateFormat http://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html.

The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html类。

要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.

您可以交换java.time对象直接与您的数据库。用一个JDBC驱动程序 https://en.wikipedia.org/wiki/JDBC_driver符合JDBC 4.2 http://openjdk.java.net/jeps/170或稍后。不需要字符串,不需要java.sql.*类。

从哪里获取 java.time 类?

  • Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8, Java SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9, Java SE 10 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_10, Java SE 11 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_11, and later - Part of the standard Java API with a bundled implementation.
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and Java SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
    • 大多数 java.time 功能都向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
  • Android https://en.wikipedia.org/wiki/Android_(operating_system)
    • 更高版本的 Android 捆绑实现java.time类。
    • 对于早期的 Android (三十ABP项目适应三十后端口 http://www.threeten.org/threetenbp/(上文提到的)。看如何使用 ThreeTenABP... http://stackoverflow.com/q/38922754/642706.

The 三十额外 http://www.threeten.org/threeten-extra/项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/Interval.html, YearWeek http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html, YearQuarter http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearQuarter.html, and more http://www.threeten.org/threeten-extra/apidocs/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Google proto 时间戳转换为 Java LocalDate? 的相关文章

随机推荐

  • 像程序一样执行快捷方式

    示例 你有一条捷径s to SomeProgram在当前目录中 In cmd exe 您可以输入s它将启动该程序 在 PowerShell 中 输入s gives The term s is not recognized as a cmdl
  • 为什么 DropDownList.SelectedIndexChanged 事件不触发?

    我有一个绑定到 ObjectDataSource 的 DropDown 在其数据绑定事件中 我在 0 索引上添加 select 值 我在页面上有一个 LinkBut ton 在其客户端单击时 我在下拉列表中选择不同的项目 使用 JavaSc
  • 附加的新行的行为与前一行(行)不同

    我有一个 HTML 表格 里面有几个td as input字段 我的表格是动态的 当页面加载时 我将附加表格的第一行并且focus在第一个输入字段中 就我而言 即Item Name 我的行中有 3 个输入字段 它们是Item Name Un
  • 这是 Firefox 中的错误还是 chrome 主动修复了我做错的事情?

    当麦克风的信号超过设定的阈值时 下面的代码只是将一个框变成红色 它在 Linux 上的 chromium 和 Windows 上的 chrome 上快乐地运行一整天 它在两个平台上的 Firefox 上也运行良好 大约 15 秒 当它在 F
  • Drupal 6 和 7 从标头中取消设置 Javascript

    编辑 我的问题适用于 Drupal 6 和 7 尽管我的代码示例是 Drupal 6 人们提供的答案对于 Drupal 的两个版本都很有用 我目前正在 Drupal 中为 Drupal 6 网站创建移动主题 并尝试通过以下方式删除所有不必要
  • jquery - 不是函数错误

    这是我的代码 function fn pluginbutton function options myoptions extend left true return this each function var focus false if
  • 当服务器仅从请求中读取标头时,Http 客户端未收到响应

    我在 Java 中搞乱了 HTTP 和套接字 希望你能对此有所了解 当我用 Java SE 11 编写的 HTTP 服务器没有读取整个请求然后响应时 客户端不会收到它或收到错误 这是为什么 在服务器读取整个请求之前 客户端是否无法读取响应
  • 如何生成可可靠扫描的小型、高密度线性条形码?

    我正在努力将 POS 系统集成到我的网站 所以我想生成条形码 我使用 SKU 作为数据字段来编码甲酸盐是XXXXX XXX XXX XXX X 是从 0 到 9 的数字 所以经过研究 我发现代码 128 是最好的纠正我的方法 如果我错了 尺
  • 如何在类的参数中保留对另一个对象的引用

    我刚开始学习Apple Swift语言 无法理解 如何在类的参数中保留对另一个对象的引用 List my custom class class RecordsList NSObject var listObj List init inout
  • 如何使用 JavaScript 动态更改 Highcharts 中的数据点

    我正在尝试改变现有系列中的一个点 通过查看 API 我一直在尝试以下操作 chart series 0 data 0 y 43 chart redraw 我确信我错过了一些简单的东西 但我无法弄清楚 感谢您的帮助 您不能只设置该值 Char
  • AngularJS - 加载时触发表单验证

    我在表单中添加了 required 和 pattern 等字段验证属性 并且该表单位于 ng controller 内 验证有效 但似乎验证是在页面加载时触发的 并且我看到页面加载时所有字段都被标记为无效并带有错误消息 我尝试将 novav
  • 从 Java 监听系统鼠标点击

    我的主要目的是计算特定应用程序上的鼠标点击次数 想象一下 我在 PC 上打开了 Microsoft Word 和 Web 浏览器 我的 Java 代码应该告诉我单击 Word 和 Web 浏览器的次数 我需要应用程序名称和点击次数 我怎样才
  • 将公式应用于一列中的所有单元格,而不是一次只应用于一个单元格?

    在 OpenOffice org Calc 中 我想将公式应用于引用同一行但不同列中的单元格的列 IE C1 48在单元格 D1 中 但我希望 D 列中的所有单元格都执行此操作 而无需手动将公式复制到每个单元格 或者换句话说 对于 C 中具
  • TypeError:PyQt4.QtCore.QVariantAnimation 表示 C++ 抽象类,无法实例化

    我有这个 PyQt5 片段 我正在尝试将其转换为 PyQt4 PyQt5 版本运行得很好 但是当我尝试转换为 PyQt4 时 出现此错误 我删除了QtWidgets但我仍然收到此错误 我也尝试过实例化self animation QtCor
  • WAR 文件在 Tomcat 服务器中抛出 OutOfMemoryError

    我有一个 Spring MVC WAR 文件 可以在我的本地计算机 程序和网站 中完美运行 一旦我将文件上传到服务器 aTomcat 7 并尝试访问它 catalina 日志文件表明java lang OutOfMemoryError 我尝
  • 将每分钟的 MP3 导出为单独的 WAV

    这绝对是一个奇怪的问题 但我正在寻找一种方法 将 60 分钟的 mp3 混合拆分为 60 个单独的 1 分钟长的 wav 文件 以便与 Echonest 等音频指纹识别 API 一起使用 这是否可以在单个 ffmpeg 命令中实现 或者我是
  • 对于 ASP.NET 中的大型网站,推荐的解决方案结构是什么

    我目前正在尝试重构一个根本没有任何分离的项目 asp net mvc 只是文件夹 s 该项目有一堆 EF Code First 类 People cs Exam cs Message cs等 该项目有几个存储库 都使用 EF Data 语境
  • 将 JQuery 日期选择器数据传递到 Rails 控制器

    我是 Rails 和 JQuery 的新手 所以我会尽力解释这一点 我正在尝试将 JQuery 日期选择器值传递给我的 Rails 控制器 该页面上有数据 我希望用户能够根据日期范围进行过滤 关于这个主题有许多不同的帖子 将变量从 jque
  • 理解 Haskell 中的矩阵转置函数

    这个矩阵转置函数有效 但我试图理解它的逐步执行 但我不明白 transpose a gt a transpose transpose x map head x transpose map tail x with transpose 1 2
  • 如何将 Google proto 时间戳转换为 Java LocalDate?

    我们需要将 Google Protobuf 时间戳转换为正常日期 在这种情况下 有没有办法将 Google Proto 缓冲区时间戳转换为 JavaLocalDate直接地 tl dr 作为 UTC 时刻 转换为java time Inst