ethiopic_calendar 0.1.7
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.rdoc +22 -0
- data/Rakefile +12 -0
- data/ethiopic_calendar.gemspec +29 -0
- data/lib/ethiopic_calendar.rb +118 -0
- metadata +59 -0
data/Manifest
ADDED
data/README.rdoc
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
= Ethiopic Calendar
|
|
2
|
+
This is a Ruby implementation of the EthiopicCalendar based on the algorithm found on
|
|
3
|
+
http://ethiopic.org/Calendars/
|
|
4
|
+
= Install
|
|
5
|
+
gem install ethiopic_calendar
|
|
6
|
+
= Usage
|
|
7
|
+
1. Include it in your Gemfile
|
|
8
|
+
gem 'ethiopic_calendar'
|
|
9
|
+
2. Add the require and include statements in config/application.rb
|
|
10
|
+
# ...
|
|
11
|
+
# This will include the ethiopic_calendar file
|
|
12
|
+
require 'ethiopic_calendar'
|
|
13
|
+
# This will enable you to use the methods inside EthiopicCalendar module without
|
|
14
|
+
# the qualified name, i.e EthiopicCalendar.fromGregorianToEthiopic
|
|
15
|
+
# instead you can simply say fromGregorianToEthiopic
|
|
16
|
+
include EthiopicCalendar
|
|
17
|
+
= License
|
|
18
|
+
This product is licensed under GPL-version 3 as defined in this site http://www.gnu.org/copyleft/gpl.html
|
|
19
|
+
= Authors
|
|
20
|
+
Gebreyohannes Zenebe, gebreyohannes@gemhalo.org
|
|
21
|
+
Yared Getachew , yared@gemhalo.org
|
|
22
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'echoe'
|
|
4
|
+
Echoe.new('ethiopic_calendar','0.1.7') do |p|
|
|
5
|
+
p.description = "A simple Ethiopic to Gregorian calendar changer"
|
|
6
|
+
p.url = "http://github.com/vedtechpro/ethiopic_calendar"
|
|
7
|
+
p.author = ["Gebreyohannes Zenebe", "Yared Getachew Tessema"]
|
|
8
|
+
p.email = ["gebreyohannes@gemhalo.org","yared@gemhalo.org"]
|
|
9
|
+
p.ignore_pattern = ["tmp/*","script/*"]
|
|
10
|
+
p.development_dependencies = []
|
|
11
|
+
end
|
|
12
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = "ethiopic_calendar"
|
|
5
|
+
s.version = "0.1.7"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["Gebreyohannes Zenebe, Yared Getachew Tessema"]
|
|
9
|
+
s.date = "2012-02-23"
|
|
10
|
+
s.description = "A simple Ethiopic to Gregorian calendar changer"
|
|
11
|
+
s.email = ["gebreyohannes@gemhalo.org", "yared@gemhalo.org"]
|
|
12
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/ethiopic_calendar.rb"]
|
|
13
|
+
s.files = ["README.rdoc", "Rakefile", "ethiopic_calendar.gemspec", "lib/ethiopic_calendar.rb", "Manifest"]
|
|
14
|
+
s.homepage = "http://github.com/vedtechpro/ethiopic_calendar"
|
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Ethiopic_calendar", "--main", "README.rdoc"]
|
|
16
|
+
s.require_paths = ["lib"]
|
|
17
|
+
s.rubyforge_project = "ethiopic_calendar"
|
|
18
|
+
s.rubygems_version = "1.8.10"
|
|
19
|
+
s.summary = "A simple Ethiopic to Gregorian calendar changer"
|
|
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
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module EthiopicCalendar
|
|
3
|
+
# A Ruby implementation of Ethiopic Calendar based on the Mathematical algorithm
|
|
4
|
+
# from http://ethiopic.org/Calendars/
|
|
5
|
+
|
|
6
|
+
# Constants used
|
|
7
|
+
public
|
|
8
|
+
#Ethiopic: Julian date offset
|
|
9
|
+
JD_EPOCH_OFFSET_AMETE_MIHRET = 1723856 # ዓ/ም
|
|
10
|
+
|
|
11
|
+
#Coptic : Julian date offset
|
|
12
|
+
JD_EPOCH_OFFSET_COPTIC = 1824665
|
|
13
|
+
|
|
14
|
+
JD_EPOCH_OFFSET_GREGORIAN = 1721426
|
|
15
|
+
JD_EPOCH_OFFSET_AMETE_ALEM = -285019 # ዓ/ዓ
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#Changes from in_date:EthiopicDate to GregorianDate
|
|
19
|
+
#
|
|
20
|
+
#@api public
|
|
21
|
+
#@param in_date always must be year,month, day in that order
|
|
22
|
+
#@return GregorianDate is returned
|
|
23
|
+
#@example fromEthiopicToGregorian('2004/5/21')
|
|
24
|
+
|
|
25
|
+
def fromEthiopicToGregorian(year,month,day)
|
|
26
|
+
#TODO : Handle Exceptions when there is a wrong input
|
|
27
|
+
gregorian_date = {:year => -1, :month => -1, :day => -1}
|
|
28
|
+
jdn = jdn_from_ethiopic(year,month,day)
|
|
29
|
+
if year <= 0
|
|
30
|
+
era = JD_EPOCH_OFFSET_AMETE_ALEM
|
|
31
|
+
else
|
|
32
|
+
era = JD_EPOCH_OFFSET_AMETE_MIHRET
|
|
33
|
+
end
|
|
34
|
+
r = (jdn - era).modulo(1461)
|
|
35
|
+
n = (r.modulo(365) ) + (365 * (r/1460 ))
|
|
36
|
+
gregorian_date[:year] = 4 * ((jdn - era)/1461) + r/365 - r/1460
|
|
37
|
+
gregorian_date[:month] = (n/30) + 1
|
|
38
|
+
gregorian_date[:day] = (n.modulo(30)) + 1
|
|
39
|
+
return [gregorian_date[:year],gregorian_date[:month],gregorian_date[:day]].join("-").to_s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
#Changes from in_date:GregorianDate to EthiopicDate
|
|
43
|
+
#
|
|
44
|
+
#@api public
|
|
45
|
+
#@param in_date always must be an aray containing year,month, day in that order
|
|
46
|
+
#@return EthiopicDate is returned
|
|
47
|
+
#@example fromEthiopicToGregorian('2012/5/21')
|
|
48
|
+
def fromGregorianToEthiopic(year,month,day)
|
|
49
|
+
#TODO : Handle Exceptions when there is a wrong input
|
|
50
|
+
ethiopic_date = {:year=>-1,:month=>-1,:day => -1 }
|
|
51
|
+
jdn = jdn_from_gregorian(year,month,day)
|
|
52
|
+
if jdn >=JD_EPOCH_OFFSET_AMETE_MIHRET + 365
|
|
53
|
+
era= JD_EPOCH_OFFSET_AMETE_MIHRET
|
|
54
|
+
else
|
|
55
|
+
era= JD_EPOCH_OFFSET_AMETE_ALEM
|
|
56
|
+
end
|
|
57
|
+
r = (jdn - era).modulo(1461)
|
|
58
|
+
n = (r.modulo(365) ) + (365 * (r/1460 ))
|
|
59
|
+
ethiopic_date[:year] =4 * ((jdn - era)/1461) + r/365 - r/1460
|
|
60
|
+
ethiopic_date[:month] =(n/30) + 1
|
|
61
|
+
ethiopic_date[:day] =(n.modulo(30)) + 1
|
|
62
|
+
return [ethiopic_date[:year],ethiopic_date[:month],ethiopic_date[:day]].join("-").to_s
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
#Date format for Ethiopic date
|
|
67
|
+
#
|
|
68
|
+
#@api public
|
|
69
|
+
#@return a formated Ethiopic date string
|
|
70
|
+
#@example ethiopic_date_format(2004-5-21,"y-m-d") will be ጥር 21 ቀን 2004ዓ/ም
|
|
71
|
+
def ethiopic_date_format(in_date)
|
|
72
|
+
date_string=in_date.split("-")
|
|
73
|
+
year=date_string[0].to_i
|
|
74
|
+
month=date_string[1].to_i
|
|
75
|
+
day=date_string[2].to_i
|
|
76
|
+
month_name =""
|
|
77
|
+
case month
|
|
78
|
+
when 1 then month_name=" መስከረም "
|
|
79
|
+
when 2 then month_name=" ጥቅምት "
|
|
80
|
+
when 3 then month_name=" ህዳር "
|
|
81
|
+
when 4 then month_name=" ታህሳስ "
|
|
82
|
+
when 5 then month_name=" ጥር "
|
|
83
|
+
when 6 then month_name=" የካቲት "
|
|
84
|
+
when 7 then month_name=" መጋቢት "
|
|
85
|
+
when 8 then month_name=" ሚያዝያ "
|
|
86
|
+
when 9 then month_name=" ግንቦት "
|
|
87
|
+
when 10 then month_name=" ሰኔ "
|
|
88
|
+
when 11 then month_name=" ሐምሌ "
|
|
89
|
+
when 12 then month_name=" ነሃሴ "
|
|
90
|
+
when 13 then month_name=" ጳጉሜን "
|
|
91
|
+
end
|
|
92
|
+
date="#{month_name} #{day} ቀን #{year} ዓ/ም"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
#Calculates the jdn from given Gregorian calendar
|
|
97
|
+
#
|
|
98
|
+
#@api private
|
|
99
|
+
#@return jdn
|
|
100
|
+
def jdn_from_gregorian(year,month,day)
|
|
101
|
+
s = ( year/4 ) - ( year - 1)/4 - ( year/100 ) + ( year - 1)/100 + ( year/ 400 ) - ( year - 1)/400
|
|
102
|
+
t = ( 14 - month)/12
|
|
103
|
+
n = 31 * t * (month - 1) + (1 - t) * (59 + s + 30 * (month - 3) + ( (3*month - 7)/ 5) ) + day - 1
|
|
104
|
+
j = JD_EPOCH_OFFSET_GREGORIAN + 365 * (year - 1) + ( year - 1)/4 - ( year - 1)/100 + ( year - 1)/400 + n
|
|
105
|
+
return j
|
|
106
|
+
end
|
|
107
|
+
#Calculates the jdn from given Ethiopic calendar
|
|
108
|
+
#
|
|
109
|
+
#@api private
|
|
110
|
+
#@return jdn
|
|
111
|
+
def jdn_from_ethiopic(year,month,day)
|
|
112
|
+
#TODO : to be implemented
|
|
113
|
+
jdn = 0
|
|
114
|
+
return jdn
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ethiopic_calendar
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.7
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Gebreyohannes Zenebe, Yared Getachew Tessema
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-02-23 00:00:00.000000000Z
|
|
13
|
+
dependencies: []
|
|
14
|
+
description: A simple Ethiopic to Gregorian calendar changer
|
|
15
|
+
email:
|
|
16
|
+
- gebreyohannes@gemhalo.org
|
|
17
|
+
- yared@gemhalo.org
|
|
18
|
+
executables: []
|
|
19
|
+
extensions: []
|
|
20
|
+
extra_rdoc_files:
|
|
21
|
+
- README.rdoc
|
|
22
|
+
- lib/ethiopic_calendar.rb
|
|
23
|
+
files:
|
|
24
|
+
- README.rdoc
|
|
25
|
+
- Rakefile
|
|
26
|
+
- ethiopic_calendar.gemspec
|
|
27
|
+
- lib/ethiopic_calendar.rb
|
|
28
|
+
- Manifest
|
|
29
|
+
homepage: http://github.com/vedtechpro/ethiopic_calendar
|
|
30
|
+
licenses: []
|
|
31
|
+
post_install_message:
|
|
32
|
+
rdoc_options:
|
|
33
|
+
- --line-numbers
|
|
34
|
+
- --inline-source
|
|
35
|
+
- --title
|
|
36
|
+
- Ethiopic_calendar
|
|
37
|
+
- --main
|
|
38
|
+
- README.rdoc
|
|
39
|
+
require_paths:
|
|
40
|
+
- lib
|
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
|
+
none: false
|
|
49
|
+
requirements:
|
|
50
|
+
- - ! '>='
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '1.2'
|
|
53
|
+
requirements: []
|
|
54
|
+
rubyforge_project: ethiopic_calendar
|
|
55
|
+
rubygems_version: 1.8.10
|
|
56
|
+
signing_key:
|
|
57
|
+
specification_version: 3
|
|
58
|
+
summary: A simple Ethiopic to Gregorian calendar changer
|
|
59
|
+
test_files: []
|