如何在JAVA中将纪元转换为mySQL时间戳

2023-11-29

如何获取mySQL时间戳格式mySQLtimestamp?

long epochNow = System.currentTimeMillis()/1000;
long epochWeek = 604800;
long date7daysAgo = epochNo2013 w - epochWeek;
String mySQLtimestamp = /* 2013-09-23:50:00 */ 

java.time

With the release of Java SE 8 in March 2014, the outdated and error-prone legacy Date-Time API (java.util Date-Time types and their formatting type, SimpleDateFormat etc.) was supplanted by java.time, the modern Date-Time API*. The following table depicts the mapping of ANSI SQL types with java.time types:

ANSI SQL Java SE 8
DATE LocalDate
TIME LocalTime
TIMESTAMP LocalDateTime
TIME WITH TIMEZONE OffsetTime
TIMESTAMP WITH TIMEZONE OffsetDateTime

注意ZonedDateTime and Instant任何 JDBC 驱动程序都不支持,而某些驱动程序例如PostgreSQL也不支持OffsetTime / TIME [ WITHOUT TIMEZONE ]。另外,请注意,所有OffsetDateTime实例必须采用 UTC(偏移量为 0)。这是因为后端将它们存储为 UTC。

如何在 JDBC 中使用它?

下面给出的是插入当前的示例代码OffsetDateTime在 UTC 中,进入columnfoo(这是TIMESTAMP WITH TIMEZONE type):

OffsetDateTime odt = Instant.now().atOffset(ZoneOffset.UTC);
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, odt);
st.executeUpdate();
st.close();

An Instant表示时间线上的瞬时点并且独立于时区,即它的时区偏移量为+00:00 hours.

下面给出了一个示例代码来检索OffsetDateTime from columnfoo:

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE <some condition>");
while (rs.next()) {
    // Assuming the column index of columnfoo is 1
    OffsetDateTime odt = rs.getObject(1, OffsetDateTime.class));
    System.out.println(odt);
}
rs.close();
st.close();

以防万一您需要转换OffsetDateTime到另一个具有不同偏移量的:

有几种方法可以做到这一点,但我主要使用OffsetDateTime#withOffsetSameInstant,转换一个OffsetDateTime进入另一个具有不同时区偏移的地方,例如

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        // A sample OffsetDateTime in UTC.
        OffsetDateTime odt = Instant.now().atOffset(ZoneOffset.UTC);
        System.out.println(odt);

        OffsetDateTime offsetTimeAtOffset0100 = odt.withOffsetSameInstant(ZoneOffset.of("+02:00"));
        System.out.println(offsetTimeAtOffset0100);

        // Time at JVM's default timezone offset
        ZoneOffset jvmTzOffset = ZonedDateTime.now(ZoneId.systemDefault()).getOffset();
        OffsetDateTime offsetTimeAtJvmTzOffset = odt.withOffsetSameInstant(jvmTzOffset);
        System.out.println(offsetTimeAtJvmTzOffset);
    }
}

Output:

2021-05-29T13:36:15.258076Z
2021-05-29T15:36:15.258076+02:00
2021-05-29T14:36:15.258076+01:00

与上面给出的代码相关的一些要点:

  1. The Z输出中是时区指示符零时区偏移。它代表祖鲁语并指定Etc/UTC时区(时区偏移量为+00:00 hours).
  2. 代码转换odt分为两个实例OffsetDateTime- 每个都以不同的方式。第一个实例的固定时区偏移量为+02:00小时,而第二个是 JVM 的时区偏移。请注意观察地点的时区偏移DST根据夏季/冬季时间而变化。因此,如果一个地方遵守 DST,则不要使用固定的时区偏移,例如+02:00小时;我们应该从 API 获取它。
  3. 我的 JVM 的时区是Europe/London目前它的偏移量是+01:00 hours.

Learn more about the modern date-time API* from Trail: Date Time.


* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.

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

如何在JAVA中将纪元转换为mySQL时间戳 的相关文章

随机推荐

  • 删除具有破坏性——但并非总是如此?

    我对 Common Lisp 的破坏性 DELETE 函数有点困惑 它似乎按预期工作 除非该项目是列表中的第一项 CL USER gt defvar test list 1 2 3 TEST CL USER gt delete 1 test
  • cuda:设备函数内联和不同的.cu 文件

    两个事实 CUDA 5 0 允许您在不同的对象文件中编译 CUDA 代码 以便稍后链接 CUDA 架构 2 x 不再自动内联函数 像往常一样 在 C C 中 我实现了一个函数 device int foo in functions cu并将
  • try... except... except... :如何避免重复代码

    我想避免写作errorCount 1在不止一处 我正在寻找比更好的方法 success False try else success True finally if success storage store commit else sto
  • MATLAB 中神经网络分类的 10 倍交叉验证示例

    我正在寻找在神经网络中应用 10 倍交叉验证的示例 我需要这个问题的链接答案 MATLAB 中 10 重 SVM 分类的示例 我想对所有 3 个类别进行分类 而在示例中只考虑了两个类别 编辑 这是我为 iris 示例编写的代码 load f
  • 将结果集中的值写入文本文件(.txt 文件)

    请帮助我处理下面的代码 因为我想将结果集中的值写入 txt 文件 Code while rs next FileWriter fstream new FileWriter file BufferedWriter out new Buffer
  • 删除列标题中“.”之后的字符

    我有一个与这里提出的问题类似的问题 r 删除列名中某些字符之后的部分不过我有一点皱纹 我的列标题的格式如 ENSG00000124564 16 和 ENSG00000257509 1 但是我想删除后面的所有字符 我不能只删除最后 x 个字符
  • ie9 不尊重 img 元素比例中的 SVG

    CSS img max height 30px HTML img src foo svg 我正在寻找这个 svg 图像按比例缩放到最大高度 30 像素高 svg 的自然尺寸为 200 像素 x 200 像素 在 FF 和 Chrome 30
  • 如何获取.NET 3.5中CSIDL_COMMON_DOCUMENTS的路径?

    我正在为安装程序执行自定义操作 它必须读取存储在的文件CSIDL COMMON DOCUMENTS以确定安装目录 我希望在自定义操作中更改安装目录不会成为问题 但这是另一个问题 我看到 NET 4 添加了CommonDocuments to
  • 如何更改ggplot中图例“键”的方向?

    如何更改下面标题的键 使其处于水平位置而不更改图形的垂直线 set seed 000 m lt matrix rnorm 100 0 1 100 1 dt lt data frame m names dt lt c X library gg
  • 根据两个变量匹配数据帧行(索引)

    我本质上是试图将杂乱的数据转换成长形式以进行线性建模 我有 2 个 data frames rec 和 book book 中的每一行都需要根据行中匹配的两个变量 MRN 和 COURSE 粘贴到 rec 的几行的末尾 我已尝试以下方法及其
  • 在 Python 中从 json 数组中选取数据对象

    我有这个数据对象 我想知道如何选择名为的子对象commits or projects 我试过all commits all data commits 但 python 强迫我给它一个整数而不是字符串 想法 commits project i
  • cudaatomicAdd 示例无法产生正确的输出

    编写以下代码的目的是将 100 个元素的浮点数数组增加 1 十倍 在输出中 我期望每个元素都有 10 0f 值的 100 个元素数组 相反 我得到随机值 您能在这里指出我的错误吗 global void testAdd float a fl
  • AutoCompleteTextView 搜索部分单词而不是整个单词

    我有一个AutoCompleteTextView 并且它工作得很好 直到我在输入中添加一个空格 比如说 如果我有许多历史事件的清单 不列颠之战 1940 突出部之战 1944 插入大量战斗 拿破仑的致命进军 1812 插入许多其他历史事件
  • 数据库中电子邮件地址的最佳长度是多少?

    这是我的查询的摘录部分 反映了EMAIL ADDRESS列数据类型和属性 EMAIL ADDRESS CHARACTER VARYING 20 NOT NULL 然而 约翰 桑德斯 uses VARYING 256 这表明我不一定正确理解
  • Java:加载依赖于其他库的库

    我想在我的 java 应用程序中加载我自己的本机库 这些本机库依赖于第三方库 当我的应用程序安装在客户端计算机上时 第三方库可能存在 也可能不存在 在我的 java 应用程序中 我要求用户指定依赖库的位置 获得此信息后 我将使用它通过 JN
  • 在我网站的图像上添加 Instagram 滤镜

    我在用CSSGram在我的网站上使图像具有类似 Instagram 的滤镜 下面是向图像添加滤镜的方法
  • android中声音转换为频率[重复]

    这个问题在这里已经有答案了 可能的重复 实时音高检测 确定通过麦克风接收到的声音的音频频率 我正在开发自己的 Android 吉他调音器 在这里我将不得不使用吉他音符频率 因此 我想知道如何在android中将通过麦克风端口传来的声音转换为
  • 在静态类中使用依赖注入

    我需要在静态类中使用依赖注入 静态类中的方法需要注入依赖项的值 以下代码示例演示了我的问题 public static class XHelper public static TResponse Execute string metodo
  • 缓冲区为空后关闭“worker”go 例程

    我想要我的 goroutine 工作人员 ProcessToDo 在下面的代码中 等待所有 排队 工作处理完毕后再关闭 工作例程有一个 待办事项 通道 缓冲 通过该通道将工作发送给它 它有一个 完成 通道来告诉它开始关闭 文档称 如果满足多
  • 如何在JAVA中将纪元转换为mySQL时间戳

    如何获取mySQL时间戳格式mySQLtimestamp long epochNow System currentTimeMillis 1000 long epochWeek 604800 long date7daysAgo epochNo