GithubHelp home page GithubHelp logo

samanzamani / persiandate Goto Github PK

View Code? Open in Web Editor NEW
319.0 8.0 42.0 5.57 MB

Persian date for android

License: BSD 3-Clause "New" or "Revised" License

Java 100.00%
date jalali android persiandate android-persiandate jalalidate

persiandate's Introduction

Saman Zamani StackOverflow

trophy

Connect with me:

persiandate's People

Contributors

ftml71 avatar hrbdev avatar mohammad1ta avatar samanzamani avatar xixiongmaoxiong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

persiandate's Issues

End of month issue

Hi Saman

Suppos current date is end of month, for example 30 Mehr 1399, when I call PersianDate constructor and set date to 1398/12/29 the result date has wrong result

PersianDate persianDate = new PersianDate(); // result is current date, such as 1399/07/30
persianDate.setShYear(1398); // 1398/07/30
persianDate.setShMonth(12); // 1398/12/30 -> 1399/01/01
persianDate.setShDay(29); // 1399/01/29
persianDate.getTime() // 1399/01/29 != 1398/12/29

It seems to need another constructor. (PersianDate(year, month, day))

thanks

Wrong time

Screenshot (912)
There is 11:37 PM but it shows 11:02 PM
Here it's my code:

public static String getPersianDate() {

        PersianDateFormat persianDateFormat = new PersianDateFormat("Y/m/d H:m:s");
        PersianDate persianDate = new PersianDate();
        return persianDateFormat.format(persianDate);
    }

Date conversion not work properly !

I think this code should work fine but it does not :

PersianDate startPersianDate = new PersianDate();

startPersianDate.setShDay(1);
startPersianDate.setShMonth(11);
startPersianDate.setShYear(1396);
long startDate = startPersianDate.getTime();

but startDate shows the current date !

Throw Exception for 1408, 1412, 1416, etc

Hi developers
I have problem with this code:

PersianDate persianDate = new PersianDate();
persianDate.setShYear(1408);
persianDate.setShMonth(1);
persianDate.setShDay(1);

//some lines of code

new PersianDate(persianDate.getTime());

Upper code throws exception:
Method threw 'java.lang.ArrayIndexOutOfBoundsException' exception.
java.lang.ArrayIndexOutOfBoundsException: length=13; index=-1

I use version 0.8.

thanks

تاریخ اشتباه هنگام تبدیل برای یک تاریخ مشخص

سلام و خسته نباشید!
وقتی تاریخ 12 نوامبر سال 2020 رو به خورشیدی تبدیل می‌کنم به جای اینکه پنجشنبه 22 آبان 1399 بگیرم برام یک‌شنبه 8 دی 1398 رو میده.
جهت اطمینان بیشتر به سایت time.ir و چند سایت دیگه رفتم و تاریخ رو تبدیل کردم همش درست بود فقط لایبرری شما غلط جواب میده.

کد من اینه:

lblUploadDate.text = PersianDateFormat("g:i l, j/X/Y").format(
                    PersianDate(TimeUtils.string2Date(content.upload_date, "DD/MM/YYYY HH:mm:ss"))
                )

چون از سرور تاریخ اپلود به فرمت
DD/MM/YY HH:mm:ss
دوباره به کاربر برمیگیرده به خاطر همین توی اپلیکیشن به همون فرمت پارس میکنمش

تابع
string2Date
این رو میده:
12/11/2020 20:29:38

که کاملاً درسته اما در تبدیل تاریخ اشتباه بهم میده

امیدوارم که منظورمو گرفته باشین ببخشین که در گیت هاب فارسی بنویسی همش بی نظم میشه

اگه خاستین به انگلیسی مینویسم

تبدیل تاریخ میلادی به شمسی

سلام. برای تبدیل تاریخ شمسی به میلادی
persianDate=new PersianDate(); persianDate.toJalali(yearInt,monthInt,dayInt); Toast.makeText(getApplicationContext(),persianDate+"",Toast.LENGTH_SHORT).show();
از کد بالا استفاده کردم ولی تاریخ امروز رو برمیگردونه

parse error

error when parsing

string date = "1399/09/07";
PersianDate persianDate = persianDateFormat.parse(date,"Y/m/d");

error message
java.lang.ArrayIndexOutOfBoundsException: length=13; index=-1

Time Zone

i used this code.
PersianDate persianDate = new PersianDate(System.currentTimeMillis());
PersianDateFormat format = new PersianDateFormat("y/m/d-H:i:s");
String time=format.format(persianDate);

but time show me +4:30. how can i correct it?

The date explicitly set is changed

Hi
Thanks for the great tool :)
I explicitly set the shYear, shMonth and shDay. and then it is changed by a day!
This is the example unit test:

    @Test
    fun persianDateTest() {
        val persianDate = PersianDate().apply {
            shYear = 1368
            shMonth = 8
            shDay = 1
        }

        assertEquals(persianDate.shYear, 1368)
        assertEquals(persianDate.shMonth, 8)
        assertEquals(persianDate.shDay, 1)
    }

the date set on persianDate is 30/7/1368

setTimeStamp

i need a method to set long value to calendar !! ( using constructor is not good answer in my situation)

تبدیل تاریخ شمسی به میلادی

سلام و وقت بخیر
چطوری میتونم تاریخ شمسی رو به میلادی تبدیل کنم ؟
PersianDate pdate = new PersianDate().initGrgDate(yearInt,monthInt,datInt);
Log.i("LOG",pdate.toString());

از این فرمت استفاده کردم ولی فقط
initGrgDate
داره ، که برای تبدیل میلادی به شمسی هست
ممنون

پیشنهاد توسعه

سلام پیشنهادی دارم برای افزودن قابلیت نمایش مناسبت به برنامه ای که توسعه دادید

الان که همه ی سیستم ها به اینترنت متصل هستند پیشنهاد میکنم ارتباط با ای پی آي های تقویم رو هم در این سورس خوب پیاده سازی کنید
خودم از این سرویس زیاد استفاده میکنم


وب سرویس تقویم فارسی

اطلاعات خوبی ارائه میده مثل وقایع و مناسبت های هر روز و دریافت رویداد در حالت شمسی و قمری و میلادی

Add getMonthList() method

Hello and thanks for your useful library. please add a method called getMonthList() or something appropriate to get Jalali month names by order of them.
Thanks again.

Wrong result in date.after(PersianDate); method

im running following test:

    String Date1 = "1398/05/20";
    String Date2 = "1398/07/20";

    assertTrue(CurrentDateTime.isInRangeDate(Date1, Date2, "1398/06/1"));
    assertTrue(CurrentDateTime.isInRangeDate(Date1, Date2, Date1));
    assertTrue(CurrentDateTime.isInRangeDate(Date1, Date2, Date2));
    assertFalse(CurrentDateTime.isInRangeDate(Date1, Date2, "1398/04/1"));
    assertFalse(CurrentDateTime.isInRangeDate(Date1, Date2, "1398/09/1"));`

    public static boolean isInRangeDate(String date1Range, String date2Range, String dateVal) {
    PersianDate date1 = stringToPersianDate(date1Range);
    PersianDate date2 = stringToPersianDate(date2Range);
    PersianDate date = stringToPersianDate(dateVal);
    boolean _1 = date.after(date1);
    boolean _2 = date.before(date2);
    boolean _3 = date.equals(date1);
    boolean _4 = date.equals(date2);

    return (date.after(date1) && date.before(date2) || date.equals(date1) || date.equals(date2));
}

     private static PersianDate stringToPersianDate(String date) {
    int day = Integer.parseInt(date.split("/")[2]);
    int month = Integer.parseInt(date.split("/")[1]);
    int year = Integer.parseInt(date.split("/")[0]);
    PersianDate persianDate = new PersianDate();
    persianDate.initJalaliDate(year, month, day);
    return persianDate;
    }

boolean _1 _2 _3 _4 are false in the first test! am i doing the compare wrong or dose this method returns wrong result?
is date.after(date1); ?
is this date "1398/06/1" is after this date "1398/05/20" ? true! so there is something wrong

year '1388' wrong

hello
in year '1388' from first month to ninth month wrong get days of month;
also #35 problem;

دریافت ماه قبل

خیلی لایبرری خوبی بود ممنون از زحماتتان
وقتی میخواییم یک ماه کم کنیم
pdate.addMonth(-1);
باید استفاده کنیم که کار نمیکنه

ما الان با این روش ماه قبل را دریافت میکنم .
int monthSh = pdate.getShMonth(); if (monthSh == 1) { monthSh = 12; } else { monthSh--; }

مشکل در تبدیل تایم استمپ به تاریخ شمسی

سلام
من دارم با تابع زیر تایم استمپ رو تبدیل میکنم اما برای تمامی تاریخ ها سال 1348 رو میزاره و کلا تبدیلش اشتباه هست
created = 1531642386;
tv_date.setText(new PersianDate((long) created)+"");

خروجی : یکشنبه 28 دی 1348 21:02:15

Unable to resolve dependency

Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.github.samanzamani.persiandate:PersianDate:0.2.
Open File
Show Details

Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve com.github.samanzamani.persiandate:PersianDate:0.2.
Open File
Show Details

Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.github.samanzamani.persiandate:PersianDate:0.2.
Open File
Show Details

Unable to resolve dependency for ':app@release/compileClasspath': Could not resolve com.github.samanzamani.persiandate:PersianDate:0.2.
Open File
Show Details

Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not resolve com.github.samanzamani.persiandate:PersianDate:0.2.
Open File
Show Details

جابجا ثبت کردن بعضی تاریخ های خاص

سلام
من موقع استفاده تو اپ متوجه شدم یه سری تاریخ های خاص که انتخاب کردیم رو اشتباه بر می گردونه تو لیستنر.
مثلا 12 بهمن 1398 رو 11 اسفند 1398 برمی گردونه
من زیاد تست نکردم که بفهمم به طور کلی مشکل چیه اما یه سری از این تاریخ ها رو اشتباه محاسبه می کنه

آپدیت

سلام وقت بخیر
آیا امکانش هست نسخه جدید رو به زبان کاتلین منتشر کنید؟
زمان تقریبی رو هم بی زحمت میفرمایید
باتشکر

مشکل در تاربع addMonth

سلام.وقت شما بخیر.ببخشید من نمیتونم برای تابع addMonth مقدار منفی بدم؟
یعنی می خوام مثلا از ما جاری یه ماه کم کنم بزنم addMonth(-1)
ممنون میشم کمک کنید

wrong result in long past dates

hi saman,
you have wrong calculation in some dates are more than 50 years past for example you converter give this result: 1311/11/9
for this date: 1933/01/30
but correct result is: 1311/11/10

it cause problem in calculating elderly peoples birthdate
thanx a lot

اشتباه در تاریخ سال کبیسه

سلام وقت بخیر، ممنون بابت تقویم شما
1408/12/30 را به اشتباه
21 march 2030 نمایش می دهد
که با توجه سایت time.ir اشتباه می باشد
تاریخ های مهم کبیسه :
1408/12/30 == 2030/3/20
1409/1/1 == 2030/3/21
1403/12/30 == 2025/3/20
1404/1/1 == 2025/3/21
1404/12/29 == 2026/3/20
1405/1/1 == 2026/3/21
1407/12/29 == 2029/3/19
1408/1/1 == 2029/3/20
این تاریخ ها با توجه به سایت www.time.ir مب باشد
با تشکر

مشکل در تاربع addDate

سلام
من با تابع
addDay
کار می کردم که متوجه شدم درست کار نمی کنه. کد شما رو بررسی کردم رسیدم به تابع
addDate
این تابع سال و ماه و روز و ساعت و دقیقه و ثانیه رو می گیره و با ضرب و تقسیم به تاریخ اضافه می کنه
در صورتی که سال همیشه 365 روز نیست و ماه هم همیشه 30 روز نیست. شما از این اعداد برای ضرب و جمع استفاده کردید.
به نظرم شما باید تاریخ فعلی میلادی رو بدست بیارید. و بعد با توابع خود جاوا تاریخ رو اضافه کنید و بعد از اون تبدیل به شمسی کنید
یه موردی هم که برخوردم تبدیل تاریخ شمسی(سال و ماه و ...) به تاریخ میلادی رو ندیدم
یا شاید هم متوجه نشدم

محاسبه تاریخ

سلام
ممنون از کمکتون
من دوتا تاریخ شمسی دارم که میخوام فاصله بینشون رو به روز بدست بیارم ولی متاسفانه نمیتونم ممنون میشم کمک کنید
مثال
1398/12/18
1398/12/20
== 2 روز

feature request

  • parsing and formatting in Persian numerals

  • subtractDate

for the first one, I'm suggesting to add "p" character before String and Pattern Keys i.e, "'pYYYY-pMM-pdd" and "'py pj'". Another easier and lazier approach would be adding the argument usePersianDialect to parse and format functions and just replace Latin numerals to Persians before parsing and after formatting. I could implement this feature, since Kotlin first, i could also convert the project to Kotlin.

the second one is as easy as the implemented adding day/month/year functionality, instead of adding to timeInMilliSecond we could subtract.

let me know what you think.

مشکل در بیلد

سلام
بعد از اضافه کردن به پروژه و بیلد کردن به ارور زیر بر می خوریم:

Duplicate class saman.zamani.persiandate.BuildConfig found in modules jetified-PersianDate-0.8-runtime (com.github.samanzamani.persiandate:PersianDate:0.8) and jetified-PersianDate-1.1-runtime (com.github.samanzamani:PersianDate:1.1)
Duplicate class saman.zamani.persiandate.PersianDate found in modules jetified-PersianDate-0.8-runtime (com.github.samanzamani.persiandate:PersianDate:0.8) and jetified-PersianDate-1.1-runtime (com.github.samanzamani:PersianDate:1.1)
Duplicate class saman.zamani.persiandate.PersianDateFormat found in modules jetified-PersianDate-0.8-runtime (com.github.samanzamani.persiandate:PersianDate:0.8) and jetified-PersianDate-1.1-runtime (com.github.samanzamani:PersianDate:1.1)
Duplicate class saman.zamani.persiandate.PersianDateFormat$1 found in modules jetified-PersianDate-0.8-runtime (com.github.samanzamani.persiandate:PersianDate:0.8) and jetified-PersianDate-1.1-runtime (com.github.samanzamani:PersianDate:1.1)

device datetime is returned not real time

Hi
PersianDate returns the device time and date
Is it the nature of your library or Im making a mistake in using ur library?!
if its normal would you please suggest a way to get the time and date in format 06:22:50 and 1398/05/06
Thanks:)

make allowBackup=false

hey thank you for library
but you need to make allow Backup in your manifest file to false . because if i wanted to disable backup in my manifest ,it conflicts with yours. now i have to download your whole repository and import it manually.
peace <3

lack of toString() in PersianDate

It would be really great that the PersianDate class has a toString() method.
I guess a proper date format would do the trick, for example:

یکشنبه ۵ دی ۱۳۹۷

Right now I'm extending this class to provide additional functionality of a toString.
Really appreciate your work, greatest hopes be with you.

Best regards, Mohsen

wrong monthName

سلام لطفاً این مورد رو چک کنید.

    for (int i = 0 ; i < 12 ; i++){

        PersianDate persianDate = new PersianDate();
        persianDate.setShYear(1399);
        persianDate.setShMonth(i+1);
        persianDate.setShDay(1);

        Log.d("TAG", "month name: "+persianDate.monthName());
    }

امروز که 31 شهریور هست ماه مهر رو برنمی گردونه و اشتباهی بعد شهریور آبان رو برمیگردونه!

Ability to change month names

Hello there,
I wanted to ask if you could add the ability to have custom month names as you know that in Solar Hijri calendar months have different names in different Middle-Eastern regions and countries like in Afghanistan they use 2 different set of names in their 2 national languages of Dari (Farsi) and Pashto (Afghani) or in Kurdish its different.
You can refer to this article for more information:
https://en.wikipedia.org/wiki/Solar_Hijri_calendar#Details_of_the_modern_calendar

Thank you

monthName() method to display name in different dialects

Salaam!
For the next release please add an optional parameter to monthName() method to return back names in different Persian dialects (Kurdi, Afghani, Irani).

What I am trying to achieve is:
return PersianDate(TimeUtils.getNowMills()).monthName()

But for now it just returns it in Iranian name (e.g. Aazar).

Thanks a world!

parse persian date string error

Hi
is there something wrong here:

PersianDateFormat format = new PersianDateFormat();
format.parse("1397-08-31","YYYY-MM-dd")

I'm getting this error:
Method threw 'java.lang.StringIndexOutOfBoundsException' exception. Cannot evaluate saman.zamani.persiandate.PersianDate.toString()

help me please

Wrong result using addDay() method

below code return wrong result for dates(1400/02/28,1400/02/29,1400/02/30,1400/02/31,1400/04/31,etc) jump to other days seems that this days dose not exist

    PersianDate pDate = new PersianDate();
    pDate.setGrgYear(1400);
    pDate.setGrgMonth(2);
    pDate.setGrgDay(28);
    pDate.addDay(1);
    String finalDate = pDate.getGrgYear()+"/"+pDate.getGrgMonth()+"/"+pDate.getGrgDay();

also in second half of year 1400 some months has 31 days :)
Thanks for your great job, pls fix it as soon as possible. 🙏

Issue with converting Gregorian date to Jalali

When I try to convert this specific date 2018/12/15 (Year/Month/Day) I get crash saying arrayindexoutofboundsexception.

Here is an example that I get crash with.

PersianDate pdate = new PersianDate().initGrgDate(2018,12,15);
PersianDateFormat pdformater = new PersianDateFormat("Y/m/d");
String dd = pdformater.format(pdate);

Could you please advise me on this please?

Wrong date conversion in a specific date

Date converted to epoch
1360/08/02 > 372780535866 UNIX
But when I try to reverse this specific date using
new PersianDateFormat("Y/m/d").format(new PersianDate(372780535866 ))
it returns 1360/07/01

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.