2008-09-18 27 views
8

Đây có lẽ là quá nhiều để hỏi, nhưng có ngôn ngữ nào thực sự là một công việc tuyệt vời để đại diện cho các hoạt động thời gian và ngày tháng không? Tôi sẽ cấp ngay rằng đó là thực sự khó khăn để viết một thư viện thời gian thực sự tuyệt vời. Điều đó nói rằng, có bất kỳ ngôn ngữ phổ biến có một? Về cơ bản, tôi muốn một cái gì đó mà xử lý thời gian và ngày như toàn diện như các thư viện biểu thức thông thường hiện đại làm công việc của họ. Mọi thứ tôi đã thấy từ trước đến nay trong Python và Java bỏ qua một hoặc nhiều phần khá quan trọng, hoặc làm quá nhiều thứ khó khăn.Ngôn ngữ nào hoạt động ngày, giờ và lịch thực sự tốt?

Ít nhất này nên trực quan để làm:

  • tìm ra số ngày giữa hai thời điểm nhất định, số phút giữa hai giai đoạn phút trao vv
  • add và trừ khoảng thời gian từ timestamps
  • cho phép chuyển đổi đơn giản giữa các múi giờ, với các thay đổi Thời gian tiết kiệm ánh sáng theo vùng tự động chiếm (do có sẵn cơ sở dữ liệu hỗ trợ chính xác về cài đặt vùng)
  • cho giai đoạn granularity ("những gì lịch ngày là ngày này không?")
  • hỗ trợ rất chung chung chuỗi-to-date chuyển đổi (được đưa ra một mô hình)

Hơn nữa, nếu có một Java-style Lịch/thiết lập GregorianCalendar , lớp Lịch chung nên có sức chứa đối với các lớp con nếu tôi cần phải cuộn tiếng Do Thái của riêng tôi, Babylonian, Tolkien hoặc MartianCalendar. (Ví dụ, Lịch Java làm việc này vô nghĩa khó khăn)

Tôi hoàn toàn không hiểu ngôn ngữ ở đây. Sẽ ổn nếu như điều bị nghẹt thở khi tính toán những thứ mơ hồ như "có bao nhiêu phút giữa năm 2002 và ngày Valentine tiếp theo?"

+2

Đây không phải là câu hỏi ngôn ngữ nhiều như câu hỏi thư viện. – Kristoffon

Trả lời

2

Tôi thích .NET cho việc này. Nó cung cấp thao tác Ngày/Thời gian tốt, với các lớp DateTime và Timespan. Tuy nhiên, hầu hết các công cụ ngày/giờ là khá đơn giản trong bất kỳ ngôn ngữ nào sẽ cung cấp cho bạn một dấu thời gian unix để làm việc.

+0

.NET là OK, nhưng một số chi tiết thì khó hiểu. – EndangeredMassa

+0

Bạn thấy khó hiểu gì? Nó hoàn toàn trực quan với tôi. Có thể đăng câu hỏi ở đây. –

7

Làm thế nào về .NET's DateTime? (Bạn có thể chọn ngôn ngữ của bạn trong khuôn khổ này)

1

Yêu thích cá nhân của tôi sẽ là Ruby với Rails 'ActiveSupport.

start_time = 5.months_ago.at_end_of_week 
end_time = 6.months.since(start_time) 

Nó hỗ trợ tất cả các tính năng bạn đã đề cập ở trên với một DSL tương tự (miền ngôn ngữ cụ thể)

4

Bạn đang tìm kiếm cái gì đó như PHPs strtotime? Điều đó sẽ cung cấp cho bạn dấu thời gian unix của hầu như bất cứ điều gì bạn có thể ném vào nó.

Từ trang web php:

<?php 
echo strtotime("now"), "\n"; 
echo strtotime("10 September 2000"), "\n"; 
echo strtotime("+1 day"), "\n"; 
echo strtotime("+1 week"), "\n"; 
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; 
echo strtotime("next Thursday"), "\n"; 
echo strtotime("last Monday"), "\n"; 
?> 

lớp ngày NET của đòi hỏi nhiều hơn phức tạp loay hoay với DateTimeFormatInfo và những thứ tương tự để phân tích chuỗi ngày đó là gần như không phức tạp như strtotime có thể xử lý.

PHP cung cấp lớp DateTime và lớp DateTimeZone dưới dạng PHP 5, nhưng cả hai đều được ghi lại khá kém. Tôi vẫn chủ yếu sử dụng dấu thời gian unix và các hàm date, timestrtotime vì tôi chưa hoàn toàn nắm bắt được các đối tượng mới.

Các liên kết sau cố gắng xác thịt ra DateTime và DateTimeZone tốt hơn một chút:

0

Ngoài: Tôi tự hỏi loại kiểu dữ liệu ngày được sử dụng trong các lĩnh vực như khảo cổ học! Làm thế nào để đại diện cho một ngày lịch sử cho một applet dòng thời gian?

1

Tôi đồng ý rằng Java SDK có triển khai thư viện datetime khủng khiếp. Hy vọng JSR-310 sẽ khắc phục vấn đề này trong Java 7. Nếu bạn không thể đợi Java 7, tôi sẽ giới thiệu tiền thân cho JSR-310, Joda Time.

Tôi đồng ý rằng triển khai Ruby on Rails trong ActiveSupport là một triển khai tuyệt vời có được những điều cơ bản đúng.

0

Ruby thực sự hỗ trợ tuyệt vời. Kiểm tra this page. Hỗ trợ tuyệt vời cho việc biến chuỗi thành ngày, ngày thành chuỗi, thực hiện toán vào ngày, phân tích chuỗi "ngôn ngữ tự nhiên" như "3 tháng trước thứ sáu lúc 3:45 chiều" vào ngày thực tế, biến ngày thành chuỗi để bạn có thể thực hiện như "Sam đăng nhập lần cuối 4 ngày trước" hoặc bất cứ điều gì ...

Rất tiện lợi.

2

PHP không phải là một nửa xấu.

// given two timestamps: $t1, and $t2: 

// find the number of days between two given dates, number of minutes 
// between two given minute periods, etc. 
$daysBetween = floor(($t2 - $t1)/86400); // 86400 = 1 day in seconds 
$hoursBetween = floor(($t2 - $t1)/3600); // 3600 = 1 hour in seconds 

// add and subtract intervals from timestamps 
$newDate = $t1 + $interval; 

// allow simple conversion between timezones, with Daylight Saving Time 
// changes by region automatically accounted for (given that there's an 
// accurate supporting database of regional settings available) 

// See PHP's Calendar functions for that 
// http://au2.php.net/manual/en/book.calendar.php 
// It not only supports basic stuff like timezones and DST, but also 
// different types of calendar: French, Julian, Gregorian and Jewish. 

// get the period that a given timestamp falls into, given period 
// granularity ("what calendar day is this date in?") 
if (date("d", $t1) == 5) // check if the timestamp is the 5th of the month 
if (date("h", $t1) == 16) // is it 4:00pm-4:59pm ? 

// support very general string-to-date conversions (given a pattern) 

// strtotime() is magic for this. you can just type in regular english 
// and it figures it out. If your dates are stored in a particular format 
// and you want to convert them, you can use strptime() 

Bạn phải tặng một số kudo khi có a function to tell what date Easter is in a given year.

3

Có một ngôn ngữ lập trình thực sự thú vị được gọi là Frink. Nó hỗ trợ khá nhiều mọi đơn vị từng được phát minh, mọi hằng số vật lý hoặc toán học, múi giờ, bla bla bla…

Nó thậm chí có web interfaceJava Applet.

Một số thách thức của bạn ở trên:

  • tìm ra số ngày giữa hai thời điểm nhất định, số phút giữa hai giai đoạn phút trao vv
    • bao nhiêu ngày cho đến Giáng sinh: # 2008-12-25 # - now[] -> days
    • bao lâu kể từ buổi trưa: now[] - # 12:00 # -> minutes
  • add và trừ khoảng thời gian từ timestamps
    • Khi là phút triệu sinh nhật của tôi: # 1979-01-06 # + 1 million minutes
  • cho phép chuyển đổi đơn giản giữa các múi giờ, wi thứ Daylight Saving Time thay đổi theo vùng tự động chiếm (cho rằng có một cơ sở dữ liệu chính xác hỗ trợ các thiết lập khu vực có sẵn)
    • Khi đã Olympic Bắc Kinh bắt đầu ở London: # 2008-08-08 08:08 PM China # -> London
  • hỗ trợ chuỗi-to rất chung chung chuyển đổi -date (cho một mẫu)
    1. Xác định một định dạng ngày mới: ### dd.MM.yyyy ###
    2. Parse: # 18.09.2008 #

Frink tích hợp độc đáo với Java: có thể là embedded in Java applications và các chương trình Frink có thể call Java code.

1

Tôi đã khá hài lòng với lớp học PEAR Date cho PHP. Nó làm mọi thứ bạn đang hỏi về, tôi tin, ngoại trừ nhiều lịch, mặc dù cũng có Date_Human, mà có thể là một mẫu cho loại điều đó.

Ngoài ra, tôi chưa làm việc với nó, nhưng Zend_Date, cũng cho PHP, có vẻ như nó sẽ hoạt động tốt cho hầu hết những gì bạn muốn. Zend_Date có lợi thế là dựa trên các dấu thời gian của Unix và thực tế là phần lớn các lớp khung công tác Zend được dự định dễ mở rộng. Vì vậy, nhiều khả năng bạn có thể nhanh chóng thêm hỗ trợ cho các hệ thống ngày khác của bạn bằng cách mở rộng Zend_Date.

1

Thư viện DateTime của Perl không nghi ngờ gì là thư viện tốt nhất (như đúng nhất) để xử lý toán giờ và múi giờ. Mọi thứ khác là sai với các mức độ khác nhau. (Và tôi nói điều này khi viết bài đăng blog tham chiếu ở trên vào thư viện DateTime/DateTimeZone PHP)

1

PHP ngày chức năng là tuyệt vời và có nhiều chức năng hữu ích (link: php.net/date)

.NET không phải là xấu trong nó bản phát hành mới nhất cộng với tôi thích thực tế bạn có thể thêm tham chiếu đến ngôn ngữ phụ và trộn và khớp mã trong dự án của bạn. Vì vậy, bạn có thể sử dụng hàm C# và VB trong cùng một lớp.

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