2012-11-11 45 views
7

Tôi là người mới bắt đầu khách quan và tôi được chỉ định tạo ứng dụng iPhone cho khách hàng của mình. Tôi có một số nền tảng với Java nhưng hầu như không có kinh nghiệm trong mục tiêu-c này và đây là lần đầu tiên tôi phát triển một ứng dụng hoàn chỉnh ...Làm thế nào để chuyển đổi NSDate thành số nguyên để vượt qua ngày PHP() làm dấu thời gian unix?

Dù sao, tôi hiện đang xếp chồng ở một số vấn đề. Một trong những vấn đề đó là tôi cần gửi một giá trị số nguyên cho hàm date của PHP từ ứng dụng iOS của tôi. Tôi đã tìm kiếm xung quanh cho giải pháp, nhưng tất cả trong số họ đang đối phó với những cách ngược lại (int đến NSDate), không phải NSDate đến giá trị số nguyên.

tôi đã cố gắng giải pháp như đã trả lời here nhưng rõ ràng nó trả gấp đôi, không phải là một số nguyên ...
Hoặc this nhưng điều này không thể có được System time.

Tôi biết tôi có thể nhận được NSDate hệ thống hiện tại với:

NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]]; 

Nhưng tôi không thể tìm ra cách để chuyển đổi này thành một số nguyên (hoặc dài) giá trị.

Tôi chỉ cần nhận được cùng một giá trị như chúng tôi có thể nhận được trong Java với System.currentTimeMillis().

Ngoài ra, đây là lần đầu tiên tôi đặt câu hỏi tại đây trong stackoverflow. Vì vậy, hãy cho tôi biết nếu có bất kỳ điều gì tôi nên làm/không nên làm khi đăng câu hỏi tại đây, v.v.

Cảm ơn bạn.

Trả lời

7

Để có được ngày hiện tại, bạn nên sử dụng này:

NSDate *theDate = [NSDate date]; 

Để có được nó trong vài giây kể từ ngày 01 tháng 1 năm 1970, như là một đôi, bạn sẽ sử dụng:

NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970]; 

Để có được nó trong ms, chỉ cần nhân giá trị trước đó cho 1000 và để cho trình biên dịch đúc nó thành một số nguyên mà không cần bất kỳ mã bổ sung nào:

Và như @HotLicks chỉ ra, trong khi System.currentTimeMillis() là trong giờ, nếu bạn cần thời gian địa phương, bạn có thể sử dụng: (. Tôi nghĩ rằng hầu hết các dịch vụ web sẽ muốn giờ mặc dù)

long long milliseconds = ([[NSDate date] timeIntervalSince1970] 
         + [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000; 

+1

Nó nên lưu ý rằng NSDate theo mặc định/thiết kế, liên quan đến UTC/GMT và không bao gồm thông tin múi giờ. Nếu người ta muốn thời gian "cục bộ" thì việc bổ sung múi giờ (được chia tỷ lệ thích hợp thành giây hoặc mili giây) phải được thêm vào. –

+2

@HotLicks: Cũng cần lưu ý rằng 'System.currentTimeMillis()' (trong java) trả về thời gian trong UTC. ;-) – lnafziger

+0

@lnafziger Cảm ơn bạn đã giải thích và giải pháp nhanh chóng và rõ ràng! Tôi thực sự đã thử điều này trước đây nhưng nó không trả lại kết quả đúng từ máy chủ PHP của chúng tôi. Tuy nhiên, tôi chạy một số thử nghiệm nhanh trong Java ngay bây giờ và tôi có thể xác nhận rằng mã của bạn trả về kết quả tương tự như currentTimeMillis của Java. Như Hot Licks đã chỉ ra, có lẽ tôi cần thêm thời gian bù đắp theo thời gian của riêng mình (vì vậy, đối với tôi thực sự không có "cách dễ dàng" để có được giá trị với múi giờ bao gồm "tự động", với dòng đơn đơn giản của phương thức). Cảm ơn cả hai đã dành thời gian đọc câu hỏi của tôi và giúp đỡ rất nhiều! –

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