热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–SimpleDateFormatter.parse以不同于指定的格式提供输出

我需要获取UNIX时间戳(String),将其转换为特定格式的日期,并将其存储在DATETIME列中的MySQLDB中.这是我的一段代码(简化):Str

我需要获取UNIX时间戳(String),将其转换为特定格式的日期,并将其存储在DATETIME列中的MySQL DB中.

这是我的一段代码(简化):

String ep ="a1527069600";
Long epoch = Long.parseLong(ep.substring(1, ep.length()));
Date dt = new Date(epoch*1000L);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
a");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
System.out.println("SDF.Format - "+sdf.format(dt));
System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));

控制台输出:

SDF.Format - 23/05/2018 03:30:00 PM

SDF.parse - Wed May 23 15:30:00 IST 2018

当我尝试在MySQL DB中推送此值时,它会抛出Invalid DateError.

只是混淆了为什么sdf.format和sdf.parse以不同的格式显示时间戳.

解决方法:

不要将日期作为字符串传递给MySQL数据库.传递日期对象更好,更简单,更安全.首先,它可以减轻您的格式和任何格式问题.最好,从java.time传递类的实例,即现代Java日期和时间API.在你的情况下,LocalDateTime会这样做.

String ep ="a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();
System.out.println(ldt);
PreparedStatement ps = myDatabaseConnection.prepareStatement(
"insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);

获得的LocalDateTime是:

2018-05-23T15:30

我将epoch字符串的转换简化了一下.使用原始的小写long而不是Long对象.假设您的数据库值在此时区,我正在使用您的亚洲/加尔各答时区.正常建议是将数据库值保持为UTC,至少是否有可能在您的时区之外使用数据.如果您需要此功能,请使用此转换而不是上述转换:

LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();

链接:Oracle tutorial: Date Time解释如何使用java.time.


推荐阅读
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Birthdate ... [详细]
  • 将字符串数字拆分成单个数字_【LeetCode】842. 将数组拆分成斐波那契序列
    【LeetCode】842.SplitArrayintoFibonacciSequence将数组拆分成斐波那契序列(Medium)(JAVA)题目描述:Givenas ... [详细]
  • Hadoop中的MapReduce框架原理、自定义Partitioner步骤、在Job驱动中,设置自定义Partitioner、Partition 分区案例
    文章目录13.MapReduce框架原理13.3Shuffle机制13.3.2Partition分区13.3.2.3自定义Partitioner步骤13.3.2.3.1自定义类继承 ... [详细]
  • Java常用类:String类目录Java常用类:String类StringString类常用方法案例演示String字符串是常量,创建之后不可改变字符串字面值存储在字符串池中,可 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • UNIX高级环境编程 第11、12章 线程及其属性
    第11章线程11.2线程概念线程资源:线程ID,一组寄存器,栈,调度优先级和策略,信号屏蔽字,e ... [详细]
  • 两个N位数a和b相乘,手算的话一般是a的末位分别乘以b的末位到首位,然后a的倒数第二位分别乘以b的末位到首位,直到a的首位分别乘以b的末位到首位,最后按位数相加。这个过程的时间复杂度是O(n2)的。 ... [详细]
  • 称号1:请描述叙事Post请求和Get请求区别的,都一般的情况下Post请求和Get请求书server数据获取请求,Get经URL至ser ... [详细]
  • [刷题] LeetCode 3 Longest Substring Without Repeating Character
    要求在一个字符串中寻找没有重复字母的最长子串思路滑动窗口如果当前窗口没有重复字母,j右移,直到包含重复字母i右移,直到不包含重复字母用数组记录字母是否出现过,判断重复实现1clas ... [详细]
author-avatar
zhangwenkaii_555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有