Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中如何将时间戳转换为日期和时间?_Java_Date_Datetime_Timestamp - Fatal编程技术网

在java中如何将时间戳转换为日期和时间?

在java中如何将时间戳转换为日期和时间?,java,date,datetime,timestamp,Java,Date,Datetime,Timestamp,我有一个来自Linux服务器的json时间戳。我想用Java把它转换成一个简单的日期时间格式 我需要以下格式的日期和时间:dd-mm-yyy-hh:mm:ss 以下是我的JSON数据: [ { "batch_date": 1419038000 }, { "batch_date": 1419037000 } ] 批处理日期 "batch_date": 1419038000, 看起来离纪元只有几秒钟了 所以 那就用它吧 SimpleDateFormat sf

我有一个来自Linux服务器的json时间戳。我想用Java把它转换成一个简单的日期时间格式

我需要以下格式的日期和时间:dd-mm-yyy-hh:mm:ss

以下是我的JSON数据:

[
  { 
    "batch_date": 1419038000
  }, 
  {
    "batch_date": 1419037000
  }
]
批处理日期

"batch_date": 1419038000, 
看起来离纪元只有几秒钟了

所以

那就用它吧

SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
--代码--

--输出--


当我们想要读取/解析一个字符串值作为日期时,我们应该知道该输入字符串的日期格式,否则我们将得到错误的日期值

批号:1419038000 此值的日期格式是什么

如果我们希望获得所需格式的日期值,如您的案例“dd-mm-yyy hh:mm:ss”。有两种可能的方法

1) 请求批处理日期值应为所需格式。或

2) 如果batch_date值是另一种格式,我们应该知道原始格式,并使用SimpleDateFormat解析方法构建具有原始格式的日期对象,然后使用另一种SimpleDateFormat格式方法将其转换为所需格式。

无此类数据类型 没有“JSON时间戳”这样的东西。JSON已经成功了。其中没有日期时间类型

正如可怕的袋熊所说,您的数字显然是1970年Unix时代的整秒计数。java.util.Date类以毫秒(而不是整秒)的形式跟踪时间。所以你需要乘以1000。您还需要处理
long
整数(64位),而不是
int
(32位)。将大写的
L
附加到数字文本,并将所有变量声明为
long

众所周知,java.util.Date/.Calendar类非常麻烦。它们现在被内置的Java8和更高版本以及/或第三方库所取代

各种JSON处理库支持用于创建java.time或Joda-time对象的转换器。也可以在代码中执行转换,如下所示

请注意,java.time和Joda time都支持分配时区。下面的代码指定UTC用于演示,但您可以指定所需/预期的区域

乔达时间 下面是2.8.1中的一些代码,以秒或毫秒的形式显示输入数字的使用

long secondsSinceEpoch = 1419038000L;
DateTime dateTimeSeconds = new DateTime( secondsSinceEpoch , DateTimeZone.UTC );
DateTime dateTimeMillis = new DateTime( secondsSinceEpoch * 1000L , DateTimeZone.UTC );  // Note the crucial "L" appended to the numeric literal.
转储到控制台

System.out.println( "dateTimeSeconds: " + dateTimeSeconds );
System.out.println( "dateTimeMillis: " + dateTimeMillis );
System.out.println( "zdtUtc: " + zdtUtc );
System.out.println( "zdtMontréal: " + zdtMontréal );
跑步的时候

dateTimeSeconds:1970-01-17T10:10:38.000Z
日期时间毫秒:2014-12-20T01:13:20.000Z
java.time 与上面的代码类似,但使用java 8的java.time

Instant instant = Instant.ofEpochSecond( 1419038000L );
ZonedDateTime zdtUtc = ZonedDateTime.ofInstant( instant , ZoneOffset.UTC );
ZonedDateTime zdtMontréal = zdtUtc.withZoneSameInstant( ZoneId.of( "America/Montreal" ) );
转储到控制台

System.out.println( "dateTimeSeconds: " + dateTimeSeconds );
System.out.println( "dateTimeMillis: " + dateTimeMillis );
System.out.println( "zdtUtc: " + zdtUtc );
System.out.println( "zdtMontréal: " + zdtMontréal );
跑步的时候

zdtUtc:2014-12-20T01:13:20Z
ZDTMONTRAL:2014-12-19T20:13:20-05:00[美国/蒙特利尔]

你的意思是
HH
,而不是
HH
@ScaryWombat我们能读懂时间戳吗?不使用这些日期格式。我的意思是,只要看一下它,我们就可以知道它类似于哪一年、哪一月或哪一天。时间戳是以秒为单位的,从1970/01/01开始,所以是的,如果你有技能,你可以计算出来,但你为什么要这样做?你是如何解析Json的?看看gson或jackson@pavankumarparasa请避免发布无关信息和数据。将您的场景降至演示问题所需的最低限度。看,我的意思是…我在jsonGood info中有一个时间戳,用于评论时区!我想知道为什么我获得了01:13:20.000Z,而不是10:13:20(作为恐怖袋熊)的时间部分!
System.out.println( "zdtUtc: " + zdtUtc );
System.out.println( "zdtMontréal: " + zdtMontréal );