hijri_gem 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest +5 -0
- data/README.markdown +27 -0
- data/README.txt +19 -0
- data/Rakefile +11 -0
- data/hijri_gem.gemspec +29 -0
- data/lib/hijri.rb +58 -0
- metadata +61 -0
data/Manifest
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
How to use
|
2
|
+
==========
|
3
|
+
|
4
|
+
# currently used for one-way conversion, more features soon
|
5
|
+
gregorian = Time.now # => 2011-03-26 00:59:51 -0400
|
6
|
+
hijri = gregorian.to_hijri # => 1432-04-22 00:59:51 -04:00
|
7
|
+
# "There is a small probability of one day error."
|
8
|
+
|
9
|
+
How to install
|
10
|
+
==============
|
11
|
+
|
12
|
+
For ruby, just install the gem and require.
|
13
|
+
|
14
|
+
$ gem install hijri_gem
|
15
|
+
$ irb
|
16
|
+
$ irb(main):001:0> require 'rubygems'
|
17
|
+
$ irb(main):002:0> require 'hijri_gem'
|
18
|
+
|
19
|
+
For Rails 3 add the following line to your bundle and install.
|
20
|
+
|
21
|
+
gem 'hijri_gem'
|
22
|
+
|
23
|
+
Todo
|
24
|
+
----
|
25
|
+
|
26
|
+
* Tests
|
27
|
+
* Words
|
data/README.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
=== How to use
|
2
|
+
# currently used for one-way conversion, more features soon
|
3
|
+
gregorian = Time.now # => 2011-03-26 00:59:51 -0400
|
4
|
+
hijri = gregorian.to_hijri # => 1432-04-22 00:59:51 -04:00
|
5
|
+
# "There is a small probability of one day error."
|
6
|
+
|
7
|
+
=== How to install
|
8
|
+
For ruby, just install the gem and require.
|
9
|
+
$ gem install hijri_gem
|
10
|
+
$ irb
|
11
|
+
$ irb(main):001:0> require 'rubygems'
|
12
|
+
$ irb(main):002:0> require 'hijri_gem'
|
13
|
+
|
14
|
+
For Rails 3 add the following line to your bundle and install.
|
15
|
+
gem 'hijri_gem'
|
16
|
+
|
17
|
+
=== Todo
|
18
|
+
* Tests
|
19
|
+
* Words
|
data/Rakefile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('hijri_gem', '0.4.1') do |p|
|
6
|
+
p.description = "Adds Hijri support to Ruby"
|
7
|
+
p.url = "http://rubygems.org/gems/hijri_gem"
|
8
|
+
p.author = "Mohammad El-Abid"
|
9
|
+
p.email = "mohammad {dot} elabid {at} gmail"
|
10
|
+
p.ignore_pattern = []
|
11
|
+
end
|
data/hijri_gem.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{hijri_gem}
|
5
|
+
s.version = "0.4.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Mohammad El-Abid"]
|
9
|
+
s.date = %q{2011-03-26}
|
10
|
+
s.description = %q{Adds Hijri support to Ruby}
|
11
|
+
s.email = %q{mohammad {dot} elabid {at} gmail}
|
12
|
+
s.extra_rdoc_files = ["README.markdown", "README.txt", "lib/hijri.rb"]
|
13
|
+
s.files = ["Manifest", "README.markdown", "README.txt", "Rakefile", "lib/hijri.rb", "hijri_gem.gemspec"]
|
14
|
+
s.homepage = %q{http://rubygems.org/gems/hijri_gem}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Hijri_gem", "--main", "README.markdown"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{hijri_gem}
|
18
|
+
s.rubygems_version = %q{1.6.2}
|
19
|
+
s.summary = %q{Adds Hijri support to Ruby}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
s.specification_version = 3
|
23
|
+
|
24
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
+
else
|
26
|
+
end
|
27
|
+
else
|
28
|
+
end
|
29
|
+
end
|
data/lib/hijri.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
class Time
|
2
|
+
def to_hijri
|
3
|
+
return Hijri.convert_time(self)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Hijri
|
8
|
+
attr_accessor :epoch, :second, :minute, :hour, :day, :month, :year, :offset
|
9
|
+
|
10
|
+
# TODO: names
|
11
|
+
|
12
|
+
h_days = ['Ahad', 'Ithnain', 'Thulatha', 'Arbiaa', 'Khamees', 'Jumaa', 'Sabt']
|
13
|
+
h_days_abbr = ['Ahd', 'Ith', 'Tha', 'Arb', 'Kha', 'Jum', 'Sab']
|
14
|
+
h_months = [nil,
|
15
|
+
'Muharram', 'Safar', 'Rabi I', 'Rabi II',
|
16
|
+
'Jumada I', 'Jumada II', 'Rajab', 'Shaaban',
|
17
|
+
'Ramadan', 'Shawwal', 'Thul-Qiaadah', 'Thul-Hijja']
|
18
|
+
h_months_abbr = [nil,
|
19
|
+
'Muh', 'Saf', 'Rb1', 'Rb2',
|
20
|
+
'Jm1', 'Jm2', 'Raj', 'Sha',
|
21
|
+
'Ram', 'Sha', 'Qid', 'Hij']
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
off = self.offset / (60*60).to_f
|
25
|
+
str = "-04:00"
|
26
|
+
str = "#{off > 0 ? '+' : '-'}#{off.to_i.abs.to_s.rjust(2,'0')}:#{((off-off.to_i)*60*10).to_i.to_s.rjust(2,'0')}"
|
27
|
+
"#{year}-#{month.to_s.rjust(2,'0')}-#{day.to_s.rjust(2,'0')} #{hour.to_s.rjust(2,'0')}:#{minute.to_s.rjust(2,'0')}:#{second.to_s.rjust(2,'0')} #{str}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.convert_time(time)
|
31
|
+
h = self.new
|
32
|
+
|
33
|
+
# following is converted from PHP via http://www.phpclasses.org/browse/download/1/file/2358/name/ICalendar.php
|
34
|
+
# which is converted from C++ via http://arabeyes.org
|
35
|
+
if(( time.year > 1582 ) || (( time.year == 1582 ) && ( time.month > 10 )) || (( time.year == 1582 ) && ( time.month == 10 ) && ( time.day > 14 )))
|
36
|
+
jd = (( 1461 * ( time.year + 4800 + (( time.month - 14 ) / 12 )))/ 4).floor + (( 367 * ( time.month - 2 - 12 * ((( time.month - 14 ) / 12).floor))) / 12).floor - (( 3 * ((( time.year + 4900+ (( time.month - 14) / 12).floor ) / 100).floor)) / 4).floor + time.day - 32075;
|
37
|
+
else
|
38
|
+
jd = 367 * time.year - (( 7 * ( time.year + 5001 + (( time.month - 9 ) / 7).floor)) / 4).floor + (( 275 * time.month) / 9).floor + time.day + 1729777;
|
39
|
+
end
|
40
|
+
|
41
|
+
l = jd - 1948440 + 10632;
|
42
|
+
n = (( l - 1 ) / 10631).floor;
|
43
|
+
l = l - 10631 * n + 354;
|
44
|
+
j = ((( 10985 - l ) / 5316).floor) * ((( 50 * l) / 17719).floor) + (( l / 5670 ).floor) * ( (( 43 * l ) / 15238 ).floor);
|
45
|
+
l = l - ( (( 30 - j ) / 15 ).floor) * ( (( 17719 * j ) / 50).floor) - ( ( j / 16 ).floor) * ( (( 15238 * j ) / 43 ).floor) + 29;
|
46
|
+
|
47
|
+
h.month = (( 24 * l ) / 709 ).floor;
|
48
|
+
h.day = l - (( 709 * h.month ) / 24).floor;
|
49
|
+
h.year = 30 * n + j - 30;
|
50
|
+
|
51
|
+
h.hour = time.hour
|
52
|
+
h.minute = time.min
|
53
|
+
h.second = time.sec
|
54
|
+
h.offset = time.utc_offset
|
55
|
+
|
56
|
+
return h
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hijri_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mohammad El-Abid
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-03-26 00:00:00.000000000 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description: Adds Hijri support to Ruby
|
16
|
+
email: mohammad {dot} elabid {at} gmail
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files:
|
20
|
+
- README.markdown
|
21
|
+
- README.txt
|
22
|
+
- lib/hijri.rb
|
23
|
+
files:
|
24
|
+
- Manifest
|
25
|
+
- README.markdown
|
26
|
+
- README.txt
|
27
|
+
- Rakefile
|
28
|
+
- lib/hijri.rb
|
29
|
+
- hijri_gem.gemspec
|
30
|
+
has_rdoc: true
|
31
|
+
homepage: http://rubygems.org/gems/hijri_gem
|
32
|
+
licenses: []
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options:
|
35
|
+
- --line-numbers
|
36
|
+
- --inline-source
|
37
|
+
- --title
|
38
|
+
- Hijri_gem
|
39
|
+
- --main
|
40
|
+
- README.markdown
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project: hijri_gem
|
57
|
+
rubygems_version: 1.6.2
|
58
|
+
signing_key:
|
59
|
+
specification_version: 3
|
60
|
+
summary: Adds Hijri support to Ruby
|
61
|
+
test_files: []
|