问题是在Java中将秒转换为日期/时间

我想将 DEC 31ST 1969 7 PM 的秒数转换为以下 Java 代码中的日期 / 时间。

我想将 DEC 31ST 1969 7 PM 的秒数转换为以下 Java 代码中的日期 / 时间。

package sampProp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.TimeZone;
public class sample 
{    
    public static void main(String args[])  
    {
     //Here 1373605580 is the number os secs from DEC 31ST 1969 7 PM
     long millisecs = (long)(1373605580) *1000;
     DateFormat df = new SimpleDateFormat("MM/dd/yyyy_HH:mm:ss a");
     df.setTimeZone(TimeZone.getTimeZone("EST"));
     Date d1 = new Date(millisecs);
     String formattedDate = df.format(d1); 
     System.out.println("Formatted date is "+formattedDate);
    } 
}

我在 AIX 服务器上运行代码。

我的开发服务器给出了值07/12/2013_00:06:20这是正确的,但我的生产服务器给出了07/12/2013_01:06:20这是不正确的。

这怎么可能。我该如何纠正这一点。

我的开发服务器的 Java 版本输出是:

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20071008 (SR6))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20071007 (JIT enabled)
J9VM - 20071004_14218_BHdSMr
JIT  - 20070820_1846ifx1_r8
GC   - 200708_10)
JCL  - 20071008

和我的生产服务器的 Java 版本输出是:

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20080315 (SR7))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20080315 (JIT enabled)
J9VM - 20080314_17962_BHdSMr
JIT  - 20080130_0718ifx2_r8
GC   - 200802_08)
JCL  - 20080314
1

是因为您的时区未正确设置在您的服务器上吗?

检查此问题和答案:java incorrect timezone

检查您的开发服务器和生产服务器上的 JVM 的时区。

编辑

正如许多人所说:它不应该来自于此,仍然很奇怪,您的配置在您的两个服务器之间看起来非常相似(仍然:JVM 不一样)。应该有区别,所以检查 JVM args 和系统变量并查看时区似乎是我的第一次。

重新编辑:

正如大卫提到的:这是一个关于节省时间的错误:

这里是链接:http://www.coderanch.com/t/458357/java/java/AIX-Timezone-Java-showing-hour

来自 IBM 的链接:http://www-01.ibm.com/support/docview.wss?uid=swg21250503

我引用:

2006 年,奥尔森数据库中的 EST 时区标识符的含义发生了变化。从历史上看,EST 引用了美国东部标准时间并对夏令时进行了调整。更改后,EST 引用了东部标准时间,而没有对夏令时进行调整。还引入了一个与原始 EST 标识符具有相同含义的新标识符 EST5EDT。因此,EST5EDT 引用了美国东部标准时间并对夏令时进行了调整

避免这些问题的最佳方法是使用像 America / New_York 这样的长时区标识符。

如果无法更改应用程序以使用长时区标识符,则可以设置系统属性 ibm.dst.compatibility 或 sun.timezone.ids.oldmapping 来更改 EST 或 MST 的解释。

0

tl;博士

使用java.time

指定所需 / 预期的时区

Ex:

Duration.between( 
    Instant.EPOCH , 
    Instant.now() 
)

避免旧式日期时间类

与最早版本的 Java 在一起的可怕的旧日期时间类在几年前被java.time类所取代。

对于通过特定区域(时区)的人使用的挂钟时间看到的时刻,请使用ZonedDateTime。对于 UTC 中的某个时刻,请使用Instant

使用正确的时区名称

Continent/Region的格式指定proper time zone name,如Europe/ParisAfrica/CasablancaPacific/Auckland。切勿使用 2-4 个字母的缩写,如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
ZoneId

从 DEC 31ST 1969 7 PM EST 开始的操作秒数

首先,EST不是一个时区,如上所述。我假设你指的是北美东海岸的时区,如America/New_York

ZoneId z = ZoneId.of( "America/New_York" ) ;  
ZonedDateTime

对于一个时区,我们需要ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.of( 1969 , 12 , 31 , 17 , 0 , 0 , 0 , z ) ;

zdt.toString ():1969-12-31T17:00-05:00 [美国 / 纽约]

Duration

要将时间跨度表示为秒数,请使用Duration类。

ZonedDateTime now = ZonedDateTime.now( z ) ;
Duration d = Duration.between( zdt , now ) ;

now.toString ():2018-12-26T19:32:08.136846-05:00 [美国 / 纽约]

d.toString ():PT429410H32M8.136846S

要求在整个秒的整个时间跨度。

long wholeSeconds = d.getSeconds();

秒:1545877928

Instant

我注意到您在 EST 中的起始时间是 1970 年之前的几个小时,恰好是 1970 年的第一时刻。该时刻 1970-01-01T00:00:00Z 是常见的epoch reference,通常称为Unix Time。该时刻也是java.time类使用的参考。

我怀疑你陷入狭隘思维的陷阱,使用你自己的个人时区的观点。当程序员在工作时,你应该在 UTC 中思考,在 UTC 中存储,在 UTC 中登录,并在 UTC 中交换数据,几乎所有的时间。只有在业务逻辑需要或用户在用户界面中期望时才应用时区。

要跟踪 UTC 时刻,请使用Instant。对于参考 1970-01-01T00:00:00Z,请使用常量Instant.EPOCH

Duration d = Duration.between( Instant.EPOCH , Instant.now() ) ;

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,如日期时间类2、日期时间类3和日期时间类SimpleDateFormat

现在位于1的项目建议迁移到2类。

要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获得许多示例和解释。规格为1。

您可以交换java。time对象直接与数据库关联。使用符合JDBC 4.2或更高版本的JDBC driver。不需要字符串,不需要java.sql.*类。

从何处获取java。时间课程?

0、1、2、3和更高版本-标准Java API的一部分,带有实现。

Java9添加了一些小功能和修复。

Java SE 6andJava SE 7

大多数java。time功能被后移植到Java 6&7英寸ThreeTen-Backport

Android

java的更高版本的Android包实现。时间类。

对于早期的Android(<26),ThreeTenABP项目适应ThreeTen-Backport(如上所述)。请参见。

ThreeTen-Extra项目扩展了java。时间与额外的课程。这个项目是未来可能添加java.time的一个试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(566)
如何在 Google电子表格中添加印度卢比货币符号
上一篇
VisualStudioALT代码符号
下一篇

相关推荐

  • java上传文件:如何使用Java实现文件上传

    Java上传文件是指使用Java程序将文件上传到Web服务器的过程。通常情况下,我们使用HTTP协议来实现文件上传,使用POST方法发送请求,并将文件作为请求体发送给服务器。下面是一个使用Java实现文件上传的示例代码:…

    2023-01-28 13:27:23
    0 58 30
  • java在线运行代码基础知识与实践

    示例示例Java在线运行代码是指使用Java语言编写的代码可以在网上直接运行,而不需要下载和安装任何软件。下面是一个简单的Java示例代码:…

    2023-01-06 14:36:41
    0 58 37
  • java实习生实习报告:Java实习生实践总结报告

    Java实习生实习报告是一种用来描述实习生在实习期间学习和实践Java技术的报告文件。它包括实习期间学习的Java基础知识、实践的Java项目、实习期间获得的技术收获以及实习期间的工作总结等内容。…

    2023-01-08 12:26:48
    0 90 26
  • java抛出异常什么意思如何捕获和处理异常

    Java抛出异常意味着在运行时发生了一个错误,导致程序不能正常运行。异常是一种特殊的对象,它提供了有关错误的信息,以便程序员可以查找并修复问题。…

    2023-01-06 05:07:07
    0 63 45
  • java数组必须定义长度吗:Java数组的定义和初始化

    示例示例不必要定义长度,可以使用动态初始化的方式来定义数组。代码示例:…

    2023-01-23 02:02:30
    0 32 27
  • java游戏引擎一次不同的游戏体验!

    Java游戏引擎是一种用于创建复杂的2D或3D游戏的软件开发工具。它使用Java语言,以及一系列的框架和库,为游戏开发者提供了一个基本的游戏开发平台。Java游戏引擎可以帮助游戏开发者节省时间和金钱,因为它们可以重复使用代码,而不必每次都重新编写代码。它们还可以提供一个可扩展的游戏开发框架,允许开发者更轻松地创建和管理游戏的各个方面。…

    2023-01-22 14:30:21
    0 84 65
  • java数组循环赋值:使用Java数组来实现循环赋值

    示例示例Java数组循环赋值是指通过循环语句来对数组中的元素进行赋值操作。代码示例:…

    2023-01-11 14:38:33
    0 39 28
  • java现在还有用吗:Java仍然是最受欢迎的编程语言之一

    是的,Java仍然是一种非常流行的编程语言,它在许多不同的领域中都得到了广泛的应用。它可以用来开发各种应用程序,包括Web应用程序,企业应用程序,桌面应用程序,移动应用程序,游戏,数据库,机器学习,大数据,物联网等。…

    2023-01-24 00:41:39
    0 92 52

发表评论

登录 后才能评论

评论列表(66条)