Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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
JavaJSONParser区分对象的类型_Java_Json_Date_Serialization_Deserialization_Jackson - Fatal编程技术网

JavaJSONParser区分对象的类型

JavaJSONParser区分对象的类型,java,json,date,serialization,deserialization,jackson,Java,Json,Date,Serialization,Deserialization,Jackson,我有一个Date序列化程序,当反序列化Date对象时,它会添加时区,但我注意到一些Date对象被转换为String而不是long值,我得到的是String值Date 因此,当我尝试: Long dateValue = jsonParser.getLongValue(); Date date = new Date(dateValue); 它引发格式异常,因此当我以**字符串**的形式获取日期时,我需要执行以下操作 String dateString = jsonParser.getText();

我有一个
Date
序列化程序,当反序列化
Date
对象时,它会添加时区,但我注意到一些
Date
对象被转换为
String
而不是long值,我得到的是
String
Date

因此,当我尝试:

Long dateValue = jsonParser.getLongValue();
Date date = new Date(dateValue);
它引发格式异常,因此当我以
**字符串**
的形式获取
日期时,我需要执行以下操作

String dateString = jsonParser.getText();
dateString
的值为
“2017-09-06”


有没有办法知道什么类型是jsonParser对象?因为在这种情况下,
instanceof
不起作用。

如果instanceof不起作用,您可以使用它将字符串转换为长字符串,这可能是可行的

Long.valueOf(String s).longValue();

如果instanceof不起作用,您可以使用它将字符串转换为Long,这可能是可行的

Long.valueOf(String s).longValue();

如果
字符串
的值为
2017-09-06
,这就是为什么不能将其作为
获取的原因。要从该
字符串
获取
日期
,需要使用
SimpleDataFormat

String dateString = "2017-09-06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateString);
唯一的问题是,
日期
不完全是日期(定义了日期/月/年)。它有,它只有自1970-01-01T00:00Z以来的毫秒数(1970年1月1日午夜,在),也称为“unix时间戳”、“毫秒值”和

使用上面的
SimpleDataFormat
将创建一个具有指定日期(2017年9月6日)的
日期。由于没有指定时间,它将默认为午夜,并且还将使用JVM默认时区。因此,这可以根据JVM中设置的时区返回不同的日期(不同的毫秒值)

如果要使用特定时区,只需在格式化程序中设置:

sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
我使用了欧洲/伦敦
,但是你可以使用任何你想要的时区。通过调用
TimeZone.getAvailableIDs()
,可以获得所有可用区域的列表(并根据您的情况选择最佳区域)

API使用的格式(始终为
地区/城市
,如
美国/圣保罗
欧洲/柏林
)。 避免使用三个字母的缩写(如
CST
PST
),因为它们是


Java新的日期/时间API 旧类(
Date
Calendar
SimpleDateFormat
)具有和,它们正在被新的API所取代

如果使用<强> java 8 < />,请考虑使用这更容易


如果您使用的是Java如果
字符串的值是
2017-09-06
,这就是为什么您不能将其作为
长的
获取的原因。要从该
字符串
获取
日期
,需要使用
SimpleDataFormat

String dateString = "2017-09-06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateString);
唯一的问题是,
日期
不完全是日期(定义了日期/月/年)。它有,它只有自1970-01-01T00:00Z以来的毫秒数(1970年1月1日午夜,在),也称为“unix时间戳”、“毫秒值”和

使用上面的
SimpleDataFormat
将创建一个具有指定日期(2017年9月6日)的
日期。由于没有指定时间,它将默认为午夜,并且还将使用JVM默认时区。因此,这可以根据JVM中设置的时区返回不同的日期(不同的毫秒值)

如果要使用特定时区,只需在格式化程序中设置:

sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
我使用了欧洲/伦敦
,但是你可以使用任何你想要的时区。通过调用
TimeZone.getAvailableIDs()
,可以获得所有可用区域的列表(并根据您的情况选择最佳区域)

API使用的格式(始终为
地区/城市
,如
美国/圣保罗
欧洲/柏林
)。 避免使用三个字母的缩写(如
CST
PST
),因为它们是


Java新的日期/时间API 旧类(
Date
Calendar
SimpleDateFormat
)具有和,它们正在被新的API所取代

如果使用<强> java 8 < />,请考虑使用这更容易


如果您使用的是Java,则当异常被抛出时,这将不起作用jsonParser.getLongValue()当异常被抛出时,这将不起作用jsonParser.getLongValue()日期字符串的值是多少?它是一个字符串“2017-09-06”
日期字符串的值是多少?它是一个字符串“2017-09-06”