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”