Có một viên ngọc hay gì đó để phân tích các chuỗi như "4h 30m" "1d 4h" - giống như các ước tính trong JIRA hoặc các nhà lập kế hoạch nhiệm vụ, có thể, với quốc tế hóa?Cách phân tích ngày/giờ/phút/giây bằng ruby?
Trả lời
Đăng một câu trả lời thứ 2, như mãn tính (mà câu trả lời ban đầu của tôi đề nghị) không cung cấp cho bạn timespans nhưng timestamps.
Đây là công cụ phân tích cú pháp của tôi.
class TimeParser
TOKENS = {
"m" => (60),
"h" => (60 * 60),
"d" => (60 * 60 * 24)
}
attr_reader :time
def initialize(input)
@input = input
@time = 0
parse
end
def parse
@input.scan(/(\d+)(\w)/).each do |amount, measure|
@time += amount.to_i * TOKENS[measure]
end
end
end
Chiến lược khá đơn giản. Tách "5h"
thành ["5", "h"]
, xác định số giây "h"
đại diện cho (TOKENS
) và thêm số tiền đó vào @time
.
TimeParser.new("1m").time
# => 60
TimeParser.new("1m wtf lol").time
# => 60
TimeParser.new("4h 30m").time
# => 16200
TimeParser.new("1d 4h").time
# => 100800
Nó không quá khó để làm cho nó xử lý "1.5h"
hoặc là nhìn thấy codebase đơn giản như vậy.
Phân tích cú pháp thành nội dung gì?
này sẽ phân tích thành một Hash:
"4h 30m".split(/\s/).each{|i| h[i.gsub(/\d+/,"")] = i.gsub(/\w/,"")}
Xin lỗi. không quen thuộc với JIRA ....
Bạn có thể sử dụng chronic. Nó có thể phân tích khá nhiều thứ mà bạn truy nguyên, bao gồm cả "ngày hôm qua", "tuần trước", v.v.
Cập nhật: Như OP chỉ ra trong ngày, không phải là thời gian. Xem câu trả lời khác của tôi.
tôi đã viết phương pháp này mà hiện nó khá tốt
def parse_duration(dur)
duration = 0
number_tokens = dur.gsub(/[a-z]/i,"").split
times = dur.gsub(/[\.0-9]/,"").split
if number_tokens.size != times.size
raise "unrecognised duration!"
else
dur_tokens = number_tokens.zip(times)
for d in dur_tokens
number_part = d[0].to_f
time_part = d[1]
case time_part.downcase
when "h","hour","hours"
duration += number_part.hours
when "m","minute","minutes","min","mins"
duration += number_part.minutes
when "d","day","days"
duration += number_part.days
when "w","week","weeks"
duration += number_part.weeks
when "month", "months"
duration += number_part.months
when "y", "year", "years"
duration += number_part.years
else
raise "unrecognised duration!"
end
end
end
duration
end
chronic_duration
thực hiện việc này.
- 1. Phân tích tệp nhị phân trong Ruby
- 2. Cách phân tích dòng văn bản được phân cách bằng tab trong Ruby?
- 3. của Ruby phân tích chuỗi
- 4. Phân tích cú pháp Javascript bằng mã Ruby
- 5. Phân tích một mảng Ruby để JSON
- 6. Cách phân tích nhận xét bằng FParsec
- 7. Cách phân tích tệp .plist bằng php?
- 8. Chuỗi phân tích ngày tháng trong Ruby
- 9. Trình phân tích cú pháp YAML của Ruby bằng cách truyền hàm tạo
- 10. cách phân tích dữ liệu xml bằng cách sử dụng phân tích cú pháp libxml
- 11. Phân tích cú pháp Ruby: phân tích cú pháp nhiều dòng
- 12. Cách phân tích BaseHTTPRequestHandler.path
- 13. Chuỗi phân tích cú pháp URL trong Ruby
- 14. Phân tích cú pháp tài liệu XML trong Ruby
- 15. Sử dụng OptionParser ruby của phân tích tiểu lệnh
- 16. Phân tích bố cục trang bằng Tesseract?
- 17. Ruby: Tại sao bằng dấu trong regexp chữ gây ra lỗi phân tích cú pháp?
- 18. Xây dựng và phân tích bằng xcodebuild
- 19. Phân tích tệp XML bằng C#?
- 20. Phân tích JSON bằng cách sử dụng Json.net
- 21. Phân tích ý kiến bằng cách sử dụng R
- 22. Phân tích ngữ nghĩa bằng cách sử dụng Solr
- 23. Phân tích cú pháp XML bằng cách sử dụng XDocument
- 24. Làm cách nào để phân tích mã (bằng Python)?
- 25. Cách tốt nhất để phân tích URL bằng C?
- 26. cách phân tích chuỗi thành cây cú pháp bằng GADT
- 27. Phân tích tệp (ics/icalendar) bằng cách sử dụng Python
- 28. Cách phân tích cú pháp tệp html bằng clojure?
- 29. Phân tích cú pháp html bằng cách sử dụng C
- 30. Phân tích cú pháp XML bằng Python
[Thời gian mãn tính] (https://github.com/hpoydar/chronic_duration) thực hiện điều này nhưng linh hoạt hơn và được kiểm tra tốt. – sj26