2015-05-02 20 views
6

Tôi đang sử dụng thời gian CST trong hệ thống của mình, từ giao diện người dùng thông qua javascript tôi gửi ngày hôm nay đến bộ điều khiển lò xo. Trong bộ điều khiển lò xo thông qua yêu cầu param Tôi nhận được ngày và chuyển đổi cho đến ngày thông qua chú thích @DateTimeFormat và tôi nhận được cùng một ngày trở lại xem tôi đang nhận được ngày chính xác những gì tôi đang mong đợi.Về vấn đề ngày ở địa phương và máy chủ

Nhưng, khi tôi kiểm tra thông qua môi trường thử nghiệm được triển khai trong máy chủ amazon. Khi tôi vượt qua ngày hôm nay và khi tôi cố gắng để có được cùng một ngày để kết thúc trước nó đến như ngày khác nhau. Tôi đã viết mã mà tôi đã sử dụng.

Javascript:

$http({ 
     method : 'GET', 
     url : urlpath + '/getDate/', 
     params: { 
      date: new Date().toString("MM/dd/yyyy") 

      } 
    }).success(function(response) { 
    console.log("date is"+response)         
} 

Java Code:

@RequestMapping(value = "/getdate", method = RequestMethod.GET) 
public Date getdate(@RequestParam("date") @DateTimeFormat(pattern ="MM/dd/yyyy") throws Exception {      
    return date;  
} 

Ngày trong máy tính cục bộ của tôi là 2015/01/05 23:17 Giao diện điều khiển tuyên bố là Fri 01 tháng năm 2015 00:00 : 00 GMT-0500 (Giờ ban ngày trung tâm) không có hh mm và ss kể từ khi tôi cắt bằng chú thích datetimeformat.

In, môi trường thử nghiệm của tôi, tôi đang sử dụng cùng mã nhưng giao diện điều khiển được priting như dưới đây Thu 30 tháng 4 năm 2015 23:00:00 GMT-0500 (Central Daylight Time)

Bất cứ ai có móng tay ra này vấn đề và cho tôi biết gốc rễ cho vấn đề này.

+2

Có thể do chênh lệch múi giờ. Đối với máy địa phương của bạn, nó sẽ nhận được múi giờ của hệ thống của bạn. Nhưng khi bạn triển khai trong môi trường thử nghiệm, nó sẽ nhận được ngày của máy chủ đó. Múi giờ của máy chủ đó có thể là một giờ trở lại. –

+0

Bạn có thể sửa mã đã đăng của mình, '@DateTimeFormat (pattern = Date date)' và 'new Date(). ToString (MM/dd/yyyy)' là - AFAIK - cú pháp không hợp lệ –

+0

Tôi khuyên bạn nên làm việc bằng 'unix timestamps' và sau đó chuyển đổi chúng thành những ngày được định dạng. – infomaniac

Trả lời

1

Thời gian chỉ là HH: MM: SS và đúng vậy. Múi giờ đến như mặc định từ máy tính của bạn trừ khi bạn ngầm đặt nó theo cách khác. Vì vậy, như bạn có thể thấy, khi bạn gửi chỉ có thời gian nó thực sự có nghĩa là không có gì về thời gian thực là gì.

Có 2 giải pháp.

1) Đơn giản nhất. Bất cứ điều gì bạn gửi đều truyền vào cùng một múi giờ. Ví dụ: UTC. Sau đó, bất cứ khi nào bạn nhận được nó - sử dụng nó như là hình thức thời gian UTC. Ngụ ý. Vì vậy, mọi phần trong hệ thống của bạn đều biết rằng thời gian gửi là UTC và hành động tương ứng. Không bao giờ để mặc định. Ai biết đâu (múi giờ) một trong những máy tính của bạn hoạt động.

2) Tương tự nhưng có nhiều thông số hơn. Gửi 2 tham số - múi giờ và thời gian. Hoạt động tương tự - bạn luôn phải truyền thời gian (một lần nữa, không bao giờ sử dụng mặc định) - nhưng, ít nhất, bạn biết thời gian thực ở phía người gửi và, trong trường hợp này, bạn sẽ thấy múi giờ máy tính thử nghiệm của bạn là gì.

Các vấn đề liên quan