当前位置: 首页 > 知识库问答 >
问题:

使用Spring Rest服务时获取错误的日期时间

傅博瀚
2023-03-14

这是我的pojo类

public class TeTripCarDtl implements Serializable {

    private static final long serialVersionUID = -7601044160087552575L;

    @Id
    @Column(name = "CAR_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long carId;

    @Column(name = "TRIP_ID")
    private long tripId;

    @Column(name = "VEHICLE_TYPE")
    private String vehicleType;

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PICKUP_DATE_TIME")
    private Date pickUpDateTime;// Here I am getting wrong time value

    @Temporal(value = TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Column(name = "RETURN_DATE_TIME")
    private Date returnDateTime;// Here I am getting wrong time value

    @Column(name = "PICK_UP_LOCATION")
    private String pickUpLocation;

    @Column(name = "DROP_OFF_LOCATION")
    private String dropOffLocation;

    @Column(name = "CONFIRMED_SPECIAL_EQUIP")
    private String confirmedSpecialEquip;

    @Column(name = "LAST_UPDATED_BY")
    private String lastUpdatedBy;

    @Temporal(TemporalType.DATE)
    @Column(name = "LAST_UPDATED_ON")
    private Date lastUpdatedOn;

    @Temporal(TemporalType.DATE)
    @Column(name = "BOOKING_DATE")
    private Date bookingDate;

    @Column(name = "STATUS")
    private String status;

    public long getCarId() {
        return carId;
    }

    public void setCarId(long carId) {
        this.carId = carId;
    }

    public long getTripId() {
        return tripId;
    }

    public void setTripId(long tripId) {
        this.tripId = tripId;
    }

    public String getVehicleType() {
        return vehicleType;
    }

    public void setVehicleType(String vehicleType) {
        this.vehicleType = vehicleType;
    }

    public Date getPickUpDateTime() {
        return pickUpDateTime;
    }

    public void setPickUpDateTime(Date pickUpDateTime) {
        this.pickUpDateTime = pickUpDateTime;
    }

    public Date getReturnDateTime() {
        return returnDateTime;
    }

    public void setReturnDateTime(Date returnDateTime) {
        this.returnDateTime = returnDateTime;
    }

    public String getPickUpLocation() {
        return pickUpLocation;
    }

    public void setPickUpLocation(String pickUpLocation) {
        this.pickUpLocation = pickUpLocation;
    }

    public String getDropOffLocation() {
        return dropOffLocation;
    }

    public void setDropOffLocation(String dropOffLocation) {
        this.dropOffLocation = dropOffLocation;
    }

    public String getConfirmedSpecialEquip() {
        return confirmedSpecialEquip;
    }

    public void setConfirmedSpecialEquip(String confirmedSpecialEquip) {
        this.confirmedSpecialEquip = confirmedSpecialEquip;
    }

    public String getLastUpdatedBy() {
        return lastUpdatedBy;
    }

    public void setLastUpdatedBy(String lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }

    public Date getLastUpdatedOn() {
        return lastUpdatedOn;
    }

    public void setLastUpdatedOn(Date lastUpdatedOn) {
        this.lastUpdatedOn = lastUpdatedOn;
    }

    public Date getBookingDate() {
        return bookingDate;
    }

    public void setBookingDate(Date bookingDate) {
        this.bookingDate = bookingDate;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "TeTripCarDtl [carId=" + carId + ", tripId=" + tripId + ", vehicleType=" + vehicleType
                + ", pickUpDateTime=" + pickUpDateTime + ", returnDateTime=" + returnDateTime + ", pickUpLocation="
                + pickUpLocation + ", dropOffLocation=" + dropOffLocation + ", confirmedSpecialEquip="
                + confirmedSpecialEquip + ", lastUpdatedBy=" + lastUpdatedBy + ", lastUpdatedOn=" + lastUpdatedOn
                + ", bookingDate=" + bookingDate + ", status=" + status + "]";
    }

}

输入json

    {"vehicleType":"ECAR","pickUpDateTime":"2017-06-10T07:30:04", "returnDateTime":"2017-06-10T07:30:04","pickUpLocation":"PNQ","dropOffLocation":"BOM","confirmedSpecialEquip":"HCL,TCS,INFO","status":"BOOKED"}    

Spring控制器类

@RestController
public class DateControllerTest {

    @RequestMapping(value="date_test", method = RequestMethod.POST)
    public String reciveData(@RequestBody TeTripCarDtl teTripCarDtl){
        System.out.println("PickUpDateAndTime:"+teTripCarDtl.getPickUpDateTime()+","
                + "ReturnDateAndTime:"+teTripCarDtl.getReturnDateTime());
        return "recived";
    }
}

我正在控制台中打印日期值,它是这样打印的。这里我得到的时间是错误的,我应该得到时间07:30:04,但我得到的是13:00:04,除了这个一切都很好

    PickUpDateAndTime:Sat Jun 10 13:00:04 IST 2017,ReturnDateAndTime:Sat Jun 10 13:00:04 IST 2017

请帮我拿这个。

共有3个答案

柳浩大
2023-03-14

我以前也遇到过同样的问题,这是一个时区问题,所以我在发送之前将我的日期转换为字符串,您可以使用此函数将日期转换为字符串:

public static String dateFormatString(Date date, String pattern) {
    if (date != null) {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        return formatter.format(date);
    }
    return null;
}

对于您可以使用的图案:yyyy-MM-dd HH: mm: ss

燕意蕴
2023-03-14

@JsonFormat注释存在时区问题。请查看链接以获取有关 issue.jackson-data-bind issue 覆盖 ObjectMapper 中的时区也不起作用的更多详细信息。我通过实现自定义日期反序列化程序解决了这个问题,如下所示:

            @Component
            public class CustomDateDeserializer extends StdDeserializer<Date> {

                /**
                * 
                */
                private static final long serialVersionUID = 1L;
                private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // specify your specific timezone

                public CustomDateDeserializer() {
                this(null);
                }

                public CustomDateDeserializer(Class<?> vc) {
                super(vc);
                }

                @Override
                public Date deserialize(JsonParser jsonparser, DeserializationContext context)
                    throws IOException, JsonProcessingException {
                String date = jsonparser.getText();
                try {
                    return formatter.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
                }
            }

然后在bean属性的setter方法上应用反序列化器。

@JsonDeserialize(using = CustomDateDeserializer.class)
public void setReturnDateTime(Date returnDateTime) {
this.returnDateTime = returnDateTime;
}

同样,您可以实现自定义序列化程序,反之亦然。

凌长恨
2023-03-14

Jackson@JsonFormat注释具有特定的时区属性。如果您指定要使用的时区,则可以解决此问题。

示例:

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Europe/Madrid")

参考:http://fasterxml.github.io/jackson-annotations/javadoc/2.1.0/com/fasterxml/jackson/annotation/JsonFormat.html

 类似资料:
  • 我已经使用react-datepicker库设置了一个DatePicker组件,并将使用今天的日期以MM-DD-YYYY格式计算的初始日期值传递给它。 但是,当我在React中加载页面时,我得到 RangeError:无效的时间值 这个错误是从哪里来的?我在控制台上记录了startDate,它对我来说似乎是有效的,这是我在其他线程中看到的用于生成开始日期的方法。

  • 我有一个简单的类,我想用它在我的Azure service bus命名空间上创建一个队列。这是我的班级: 一切都设置好了,似乎正在工作,我在启动时注册了服务,我的连接字符串通过了,作为服务总线连接字符串: Endpoint=sb://myservicebus。服务总线。窗户。净/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessK

  • 我想用python获得今天的时间戳,我尝试了这个错误

  • 我有一个具有域范围委托设置的服务帐户,我正在尝试使用该服务帐户创建新帐户(google api服务管理目录),然后向新创建的帐户添加一些预设日历(google api services日历)。 我在目录api方面没有任何问题。我必须使用服务帐户创建一个委派(管理)用户,所有目录api调用都工作正常。 然而,我在日历api调用工作时遇到了问题。 Java依赖性: Java代码: 堆栈跟踪 : 有趣的

  • 我有两个日期字段: 开始日期和结束日期和临时日期。 我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间? 在示例记录中,我需要获得第二条记录,因为与临时日期相近。实例