معرفی PersianDatePicker برای اندروید

در مطالب پیشین سایت، نحوه کار کردن با تاریخ و تقویم در جاوا و نحوه کار کردن با تاریخ و تقویم هجری شمسی (جلالی) را آموزش دادم. در همانجا به دوستان وعده کردم که در آینده نزدیک یک View اندروید برای انتخاب تاریخ هجری شمسی (جلالی) خواهم نوشت و آن را در GitHub منتشر خواهم کرد. در چند روز قبل فرصتی فراهم شد و این View را تکمیل کردم و در GitHub منتشر کردم. امروز می خواهم نحوه استفاده از آن را آموزش دهم تا در صورت نیاز بتوانید از آن استفاده کنید.

نصب و راه اندازی

برای استفاده از این View دو راه دارید:

روش اول:

این پروژه را دانلود کنید و به عنوان یک پروژه کتابخانه ای به پروژه خود اضافه کنید.

برای شروع، یک پروژه اندروید جدید بسازید. بعد از منوی فایل گزینه Import را انتخاب کنید:

android-persian-date-picker-guide-import-project

در ویزارد نمایش داده شده، گزینه Existing Android Code Into Workspace را انتخاب کنید و Next بزنید:

android-persian-date-picker-guide-import-project-2

در مرحله بعد مسیر شاخه ای که پروژه را دانلود کرده اید انتخاب کنید و Finish کنید:

android-persian-date-picker-guide-import-project-3

برای اینکه بتوانید در سایر پروژه ها از این کتابخانه استفاده کنید، لازم است مطمئن شوید که این پروژه یک پروژه کتابخانه است. برای این کار بر روی پروژه PersianDatePicker کلیک راست کنید و گزینه Properties را انتخاب کنید:

android-persian-date-picker-guide-set-as-library-project

اگر Is Library تیک نخورده است، آن را تیک بزنید و OK کنید.

حالا بر روی پروژه اصلی خودتان که می خواهید در آن از PersianDatePicker استفاده کنید، کلیک راست کنید و گزینه Properties را انتخاب کنید:

android-persian-date-picker-guide-add-library-project-1

مطابق عکس بالا، دکمه Add را بزنید و از پنجره نمایش داده شده، پروژه PersianDatePicker را انتخاب کنید:

android-persian-date-picker-guide-add-library-project-2

پنجره های باز را OK کنید و برگردید به پروژه خودتان!

در فایل Layout که می خواهید در آن از PersianDatePicker استفاده کنید، باید خط زیر را اضافه کنید:

xmlns:app="http://schemas.android.com/apk/res-auto"

شکل کلی کد شبیه قطعه کد زیر خواهد شد:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

</LinearLayout>

حالا می توانید تگ های مزبوط به PersianDatePicker را به صفحه خود اضافه کنید:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ir.smartlab.persindatepicker.PersianDatePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

اگر این برنامه را اجرا کنید، می توانید PersianDatePicker را ببینید:

android-persian-date-picker-guide-output

 

روش دوم:

در این روش، اگر می خواهید از پروژه کتابخانه ای -به هر دلیلی- استفاده نکنید، می توانید کدهای PersianDatePicker را به پروژه خود اضافه کرده و به صورت مستقیم از آنها در کد خود استفاده کنید. برای این کار

۱- همه کدهای جاوا را از پوشه src در PersianDatePicker به پوشه src در پروژه خود کپی کنید،

۲- فایل sl_persian_date_picker.xml که در پوشه res/layout قرار دارد را به پوشه متناظر در پروژه خود کپی کنید،

۳- قطعه کد زیر را به فایل attrs.xml پروژه خود که در مسیر res/values قرار دارد اضافه کنید (اگر این فایل وجود ندارد، یک فایل XML اندروید از نوع resources به همین نام ایجاد کنید و این کدها را در میانه تگ resource اضافه کنید):

<declare-styleable name="PersianDatePicker">
    <attr name="minYear" format="integer" />
    <attr name="maxYear" format="integer" />
    <attr name="selectedYear" format="integer" />
    <attr name="selectedMonth" format="integer" />
    <attr name="selectedDay" format="integer" />
    <attr name="displayMonthNames" format="boolean" />
    <attr name="yearRange" format="integer" />
</declare-styleable>

حالا به سادگی می توانید از این View در برنامه خود استفاده کنید!

تنظیمات

اگر دقت کنید می بینید که PersianDatePicker تاریخ فعلی را نمایش می دهد. سالها از ۱۰ سال قبل تا ۱۰ سال بعد قابل انتخاب هستند. این رفتار پیش فرض این View است. اما شما می توانید بسیاری از رفتارهای پیش فرض آن را تغییر داده و به شکل مطلوب خود از این View استفاده کنید.

نمایش نام ماه

اگر بخواهید به جای شماره ماه، نام ماه های نمایش داده شود، ویژگی displayMonthNames را true کنید:

<ir.smartlab.persindatepicker.PersianDatePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:displayMonthNames="true" />

در این صورت PersianDatePicker به شکل زیر نمایش داده خواهد شد:

android-persian-date-picker-guide-output-with-month-names

نمایش یک تاریخ خاص

اگر بخواهید در اولین اجرا، PersianDatePicker به جای نمایش تاریخ فعلی، یک تاریخ خاص را نمایش دهد، می توانید از ویژگی های selectedYear و selectedMonth و selectedDay استفاده کنید:

<ir.smartlab.persindatepicker.PersianDatePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:selectedYear="1390"
    app:selectedMonth="5"
    app:selectedDay="15" />

تعیین محدوده سالها

به صورت پیش فرض محدوده سالها، از ۱۰ سال قبل از سال فعلی تا ۱۰ سال بعد از آن است. اگر بخواهید می توانید این مقدار را با استفاده از ویژگی yearRange تغییر دهید:

<ir.smartlab.persindatepicker.PersianDatePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:yearRange="15" />

تعیین یک مقدار خاص برای کمترین و بیشترین سال

به جای تعیین محدوده سالهای نمایش داده شده، می توانید با استفاده از ویژگی های minYear و maxYear کمترین و بیشترین مقدار برای سالها را انتخاب کنید:

<ir.smartlab.persindatepicker.PersianDatePicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:maxYear="1450"
    app:minYear="1350" />

استفاده از PersianDatePicker در جاوا

۱- می توانید برای نمایش یک تاریخ خاص یک شی java.util.Date به PersianDatePicker بدهید:

persianDatePicker.setDisplayDate(new Date());

۲- برای نمایش یک تاریخ خاص می توانید به جای استفاده از java.util.Date از ir.smartlab.persindatepicker.util.PersianCalendar استفاده کنید:

PersianCalendar persianCalendar = new PersianCalendar();
persianCalendar.setPersianDate(1393, 6, 28);
persianDatePicker.setDisplayPersianDate(persianCalendar);

۳- هز زمان که خواستید می توانید تاریخی که کاربر انتخاب کرده است را به یکی از دو شکل java.util.Date و ir.smartlab.persindatepicker.util.PersianCalendar بگیرید:

Date d = persianDatePicker.getDisplayDate();
// OR
PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();

سالهای کبیسه

PersianDatePicker به کاربر اجازه نمی دهد تا تاریخ اشتباهی انتخاب کند. برای مثال اگر تاریخ فعلی ۳۱ شهریور باشد و کاربر ماه را از شهریور به مهر تغییر دهد، بلافاصله ۳۱ تبدیل به ۳۰ شده و ۳۱ از میان گزینه های انتخاب روز حذف می شود. حالا اگر کاربر همچنان ماه را تغییر دهد تا برسد به اسفند، PersianDatePicker کنترل می کند که اگر سال کبیسه نباشد، مجدداً ۳۰ تبدیل می شود به ۲۹ و ۳۰ از میان گزینه های انتخاب روز حذف می شود. بنابراین کاربر نمی تواند مثلاً ۳۱ اسفند را انتخاب کند!


 

در آینده ویژگی های بیشتری مثل نمایش به صورت Dialog هم به PersianDatePicker افزوده خواهد شد.

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail




178 فکر می‌کنند “معرفی PersianDatePicker برای اندروید

  1. علی

    سلام خسته نباشید و میخواستم بگم ما میخواستیم یه سایت بزنیم بعد نسخه اندرویدش هم میخوایم بزنیم
    برای همین میخواستم بدونم چطوری میشه درست کرد اگه مطلب شو بزارین ممنون میشم .

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام،
      در آینده مطالبی درباره انواع فریمورکهای برنامه نویسی وب و هایبرید در اندروید خواهم نوشت.

      پاسخ
  2. توحید

    سلام
    اول دست مریزاد می گم بهتون و تشکر می کنم بابت زحمتی که کشیدید.
    دوم اینکه من تازه کار برنامه نویسی اندروید را شروع کردم و مطابق دستوراتی که فرموده بودید جلو رفتم که با این مشکل برخورد کردم:
    Screen Shot 2014-11-05 at 6.13.47 PM.png
    اگر براتون زحمتی نبود راهنمایی بفرمایید.
    با سپاس

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      احتمالاْ مشکل در تنظیمات جاوای پروژه شما است. چک کنید ببینید مشکل خاصی در تنظیمات ندارید؟

      پاسخ
      1. مسعود

        سلام
        خیلی کار عالی ای هستش
        بسیار ممنون

        اما بنده هم دقیقا همین مشکل آقای “توحید” رو دارم.

        ممنون میشم بررسی کنید

        مشکلی هم در تنظیمات جاوا ندارم.اگر ممکنه بفرماییید تنظیمات جاوا چطور باید باشه

        ممنون

        پاسخ
        1. علی بهزادیان نژاد نویسنده

          سلام
          سپاس بابت محبت شما.
          عکسی که آقا توحید فرستادن، پکیج java.util برای برنامه نامشخصه. به هر حال بررسی می‌کنم ببینم مشکل از کجاست.

          پاسخ
  3. hamid

    با عرض سلام و خسته نباشید

    میخواستم بدونم امکان این که بشه از این کامپوننت به صورت spinner استفاده کرد هست

    ممنون

    پاسخ
  4. علی بهزادیان نژاد نویسنده

    سلام
    در آپدیت بعدی skin براش تعریف می‌کنم که بشه کامپوننت رو به صورت spinner و dialog هم باز کرد.
    سپاسگزارم

    پاسخ
  5. تارا

    سلام تشکر از آموزشی که گذاشتین
    از برنامه PersianDatePicker بعنوان کتابخانه برای برنامم استفاده کردم. اما وقتی می خوام در یکی از فایل های xml از DatePicker استفاده کنم با خطا مواجه میشم:

    eclipse.buildId=4.3.2.M20140221-1700
    java.version=1.7.0-ea
    java.vendor=Oracle Corporation
    BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
    Framework arguments: -product org.eclipse.epp.package.java.product
    Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.java.product

    Error
    Sun Dec 14 09:25:38 PST 2014
    Failed to load properties file for project ‘PersinDatePicker’

    از این کد در xml طبق آموزش استفاده کردم:

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام تارا
      این‌طور که از خط آخر خطایی که فرستادی فهمیده می‌شه احتمالاً یکی از این دو مشکل برات رخ داده:
      ۱- کد برنامه رو به پروژه خودت اضافه کردی و یادت رفته فایل attrs.xml رو آپدیت کنی،
      ۲- کد این کامپوننت رو به عنوان یک کتابخانه به پروژه خودت اضافه کردی ولی یادت رفته این خط رو به اول xml اضافه کنی:
      xmlns:persianDatePicker=”http://schemas.android.com/apk/res-auto”
      چک کن و نتیجه رو اطلاع بده.

      پاسخ
  6. نیلوفر

    سلام، ممنون که این View رو نوشتین، خیلی کاربردیه. من می خوام از این View توی Android Studio استفاده کنم ولی متاسفانه زمانی که بعد از import کردن library می خواد build رو انجام بده این error رو بهم می ده:
    Error: Configuration with name ‘default’ not found
    مشکل چیه؟

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام و سپاس. من هنوز توی اندروید استودیو تستش نکردم متأسفانه. به زودی تست می‌کنم ببینم مشکل از کجا است.

      پاسخ
      1. فرشاد

        بله مشکل از چیدمان xml بود چون در یک fragment استفاده کردم

        فقط الان یک مشکل دیگه هم دارم و اون گرفتن مقدار انتخابی کاربر است که موقع اجرا برنامه خطا میدهد و pCal را نمی شناسد

        import ir.smartlab.persindatepicker.PersianDatePicker;
        import ir.smartlab.persindatepicker.util.PersianCalendar;
        public class HomeFragment extends Fragment {

        private View btnCheckFalAction;
        private PersianDatePicker persianDatePicker;

        public HomeFragment(){}
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        btnCheckFalAction = (Button) rootView.findViewById(R.id.btnCheckFal); // you have to use rootview object..

        PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();

        btnCheckFalAction.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v)
        {

        Toast.makeText(getActivity(), “Date is : ” + pCal , Toast.LENGTH_LONG).show();
        }
        });

        return rootView;
        }
        }

        پاسخ
        1. علی بهزادیان نژاد نویسنده

          سلام
          اول باید PersianDatePicker رو هم مثل بقیه View ها با اسافاده از findViewById مقداردهی کنید:

          PersianDatePicker pdp = rootView.findViewById(R.id.someId)
          PersianCalendar pCal = pdp.getDisplayPersianDate();

          موفق باشید

          پاسخ
  7. عباس

    سلام من کد زیر برای گرفتن تاریخ از کادر دیالوگ ونمایش در اکتیویتی نوشتم
    TextView txt= (TextView) getActivity().findViewById(R.id.date);
    PersianDatePicker pdp = (PersianDatePicker) getDialog().findViewById(R.id.datepicker);
    PersianCalendar data1 = pdp.getDisplayPersianDate()
    txt.setText(data1.toString());
    که خروجی زیر میده
    ir.smartlab.persiandatepicker.util…

    پاسخ
  8. omid

    با سلام
    من وقتی میخوام تو کد xml توی تگ datepicker از این دستور ها استفاده کنم ارور می ده
    app:yearRange
    یا
    app:selectedYear=”1390″
    app:selectedMonth=”5″
    app:selectedDay=”15″
    یا
    app:maxYear=”1450″
    app:minYear=”1350″
    میشه راهنمایی کنید چی کار کنم .
    تمام کارهایی که در روش دوم گفتین را انجام دادم.
    الان میخوام بگم که رنجش بیشتر از ۱۰ سال باشه ولی متاسفانه تو فایل طئم همچین ارورری میده :
    Error parsng xml:unbound prefix
    لطفا اگه میشه کمک کنید.

    پاسخ
  9. امین

    سلام. من از پروژه ی شما استفاده کردم. ممنون ولی یه مشکلی داره . از ساعت ۱۲ شب تا ۳:۳۰ دقیقه صبح تاریخ یک روز قبل رو نشون میده ولی روز هفته رو درست نشون میده. (و بعد از ساعت ۳:۳۰ همه چیز دو درست نشون میده.) اگه ممکنه کمک کنید.

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام.
      علت اینه که Timezone دستگاه شما «تهران» نیست و افق ایران با گربنویچ ۳٫۵ ساعت اختلاف داره. یا در برنامه Locale خود را تنظیم کنید یا گوشی خود را تنظیم کنید.

      پاسخ
    1. علی بهزادیان نژاد نویسنده

      هر زبان و هر کشور قوانین خودشون رو برای نمایش تاریخ، واحدهای پول، اختلاف زمانی، تغییر ساعت و غیره دارن که در اصطلاح جاوا به اونا locale گفته می شه.
      درسته که گوشی شما روی locale ایرانه ولی باید به برنامه صریحا گفته بشه که از چه locale ی استفاده کنه.

      پاسخ
    1. علی بهزادیان نژاد نویسنده

      برای این که برنامه از locale تنظیم شده در دستگاه استفاده کنه، به شیوه زیر عمل کنید:

      PersianCalendar persianCalendar = new PersianCalendar();
      persianCalendar.setTimeZone(TimeZone.getDefault());

      پاسخ
  10. مرصاد ابراهیمی

    سلام دوست عزیز. ممنون بابت نوشتن این کلاس تاریخ. من تو اندروید دو تا مشکل داره تو نسخه های بالا وقتی که تمام مراحلی که گفتید رو میرم خطای زیر رو میده:

    ۰۳-۰۸ ۱۵:۱۴:۰۲٫۱۰۱: E/AndroidRuntime(22650): FATAL EXCEPTION: main
    ۰۳-۰۸ ۱۵:۱۴:۰۲٫۱۰۱: E/AndroidRuntime(22650): android.view.InflateException: Binary XML file line #70: Error inflating class ir.smartlab.persindatepicker.PersianDatePicker

    برای اندرویدهای ۲.۲ انگار جواب نمیده متاسفانه

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام
      به علت استفاده از NumberPicker در این کتابخانه، نمی‌توان از آن در برنامه‌‌های با minSdkVersion کمتر از ۱۱ (اندروید ۳) استفاده کرد.

      پاسخ
  11. سید کریم

    با سلام خدمت شما آقای بهزادیان نژاد.
    نخست متشکرم از شما به خاطر آموزش های خوب شما.

    وقتی این پروژه را import کردم در فایل TimeZone.java روی import java.util.TimeZone خطا می گیره. باید چکار کرد؟

    پاسخ
  12. vahid

    سلام آقای بهزادیان نژاد
    من همونطور که آموزش دادید مراحل رو انجام دادم اما موقع اجرای برنامه این خطا رو میده که کلاس پیدا نشد

    ۰۴-۰۷ ۰۴:۱۹:۳۸٫۱۱۰: E/AndroidRuntime(2588): Caused by: java.lang.ClassNotFoundException: ir.smartlab.persindatepicker.PersianDatePicker
    ۰۴-۰۷ ۰۴:۱۹:۳۸٫۱۱۰: E/AndroidRuntime(2588): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)

    پروژه رو به عنوان Library هم انتخاب کردم اما نمیدونم مشکل از کجاست ، امکانش هست یه راهنمایی بفرمایید از صبح درگیرشم نفهمدیم باید چی کار کرد
    پیشاپیش ممنونم

    پاسخ
    1. vahid

      عذر می خوام من همزمان یک Library دیگه رو هم دانلود کرده بودم اونو با کد شما اشتباه گرفتم ، اما حالا که کپی کردم فایلهای جاوا رو ( طبق مرحله دوم ) کلاس PersianDatePicker.java ، آی دی ها رو نمیشناسه و به همه ی اونها میگه r can not be resolved to a variable
      یکی دو بارهم پاک کردم و دوباره کپی کردم اما برطرف نشد

      پاسخ
  13. فرزانه

    salam mishe begin cheejoori mitonam khoroji ro ba formate yyyy/mm/dd begiiram??????
    ya age k mishe ba hamin format yyyy/mm/dd vali shamsi bashe k che behtar ,az code zir estefade kardam ama naashood 🙁

    String dd=mydate.getDisplayDate().toString();

    text.setText(new SimpleDateFormat(“yyyy-MM-dd”).format(dd));

    پاسخ
  14. Arash

    سلام
    یه مشکلی پیش اومده برای من ممنون میشم راهنمایی کنید.
    من این date picker شما رو توی یک دیالوگ نمایش میدم و توی اون دیالوگ یه دکمه ی ok گذاشتم. که با زدن اون دکمه مقدار getDisplayPersianDate رو به یه EditText میدم. کد زیر :

    btnChangeDate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    // custom dialog
    final Dialog dialog = new Dialog(context);
    dialog.setContentView(R.layout.date_dialog);
    dialog.setTitle(“date picker…”);

    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
    dialogButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    PersianCalendar d = persianDatePicker.getDisplayPersianDate();
    editTextDate.setText(d.getPersianShortDate());
    dialog.dismiss();
    }
    });

    dialog.show();

    }
    });

    مشکلم اینجاست که همواره مقدار تاریخ جاری رو بهم برمیگردونه ! ینی هر چقدر من عوض میکنم هیچ اتفاقی نمیوفته.
    اما متد شما میگه getDisplayPersianDate !!
    ینی تاریخی که داری نمایش میدی رو برگردون. !!! نه تاریخ جاری رو !!
    ممنون میشم راهنمایی کنید.

    پاسخ
  15. سعیدرضا تولایی

    سلام، با تشکر از کتابخانه خوبتون میخواستم بدونم برای اینکه بشه روز را تعیین کرد آیا تابعی داره این کتابخانه؟

    مثلا تاریخ که انتخاب شد بتونیم بگیم که چه روزی هست، شنبه، یکشنبه ؟

    ممنون از توجهتون

    پاسخ
  16. شاهو

    سلام.خسته نباشید

    اردیبهشت رو اردی بهشت می نویسه
    u06cc مال ی هستش
    u0627 مال ب هستش
    برای ب دو طرف چسبان چه کدی بنویسم
    یا معادل این کد ها را کجا پیدا کنم ممنون

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام
      اردیبهشت به بونیکد این میشه:
      ۰۶۲۷ ۰۶۳۱ ۰۶۲F 06CC 0628 0647 0634 062A
      اتصال حروف توسط خود کتابخانه‌های نمایش متن (در اندروید کتابخانه Skia) انجام میشه و شما لازم نیست کار خاصی بکنید.

      پاسخ
  17. حامد

    سلام
    کار بسیار قشنگی کردین. خیلی عالیه
    چه جوری می تونم با کد تاریخ تقویم رو تنظیم کنم به تاریخ امروز؟
    می خوام با زدن یه دکمه تاریخ در حال نمایش تقویم تنظیم بشه به تاریخ امروز(تاریخ گوشی)

    پاسخ
  18. امیررضا

    سلام می خواستم بدونم از این کتابخنه چطور تو اندروید استادیو استفاده کنم و آیا باید به gradle.build چیزی اضافه کنم
    با تشکر

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام. این کتابخانه را هنوز به jcenter اضافه نکردم بنابراین نمی‌توانید از امکانات gradle‌استفاده کنید. فقط باید سورس کد برنامه را به پروژه خودتان اضافه کنید.

      پاسخ
  19. محسن

    سلام
    مهندس ۴ ساعته دارم با این خطا سر و کله میزنم اما متاسفانه نتیجه ای نگرفتم

    The following classes could not be instantiated:
    – ir.smartlab.persindatepicker.PersianDatePicker (Open Class, Show Error Log)
    See the Error Log (Window > Show View) for more details.
    Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse

    لطفا راهنمایی بفرمایید

    پاسخ
  20. مهدی

    سلام دوست عزیز
    منم بینهایت از لطف شما ممنونم
    واقعا زحمت کشیدید
    فقط دوست عزیز منم مشکل آقا Arash رو دارم یعنی وقتی می خوام توی Dialog ازش استفاده کنم فقط تاریخ جاری رو برمی گردونه و تاریخ تغییر یافته رو نمایش نمیده
    علت چی میتونه باشه؟
    با تشکر

    پاسخ
  21. آرمین

    سلام خسته نباشید ،
    ببخشید میخواستم بپرسم چرا ویژگی minYear و maxYear برای من کار نمیکنه ؟ من از Eclipse استفاده میکنم .

    پاسخ
  22. majid

    سلام استاد
    من لینک (روش)دانلود PersianDatePicker رو تویGitHub پیدا نکردم
    لطفا فایل PersianDatePicker به ایمیلم ارسال کنید
    پیشاپیش ممنون.

    پاسخ
  23. smo

    سلام دوست عزیز
    ممنون از زحمتی که کشیدین….
    فقط من از inetlij idea استفاده میکنم میشه بنده رو راهنمایی کنید تا چطور از این لایبرری استفاده کنم
    و آیا میتونم این رو با custom dialog هم استفاده کنم

    پاسخ
  24. سینتل

    خروجی getDisplayPersianDate به شکل زیره: (ممنون میشم اصلاحش کنید)
    at.andreasrohner.spartantimelapserec.persindatepicker.util.PersianCalendar[time=1312653074599,areFieldsSet=true,lenient=true,zone=GMT,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=7,WEEK_OF_YEAR=32,WEEK_OF_MONTH=1,DAY_OF_MONTH=6,DAY_OF_YEAR=218,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=51,SECOND=14,MILLISECOND=599,ZONE_OFFSET=0,DST_OFFSET=0,PersianDate=1390/05/15]

    پاسخ
  25. حمید

    سلام،

    من از datepicker شما استفاده کردم تو پروژه ام ولی وقتی ساعت از ۱۲ شب میگذره تاریخ روز قبل رو نشون میده.یعنی timezone باید ست باشه تا سر ساعت ۱۲شب تاریخ عوض بشه. من کد زیر رو تغییر دادم ولی بازم تغییری ایجاد نشد.
    این کد در پکیج ir.smartlab.persindatepicker.util در کلاس PersianCalendar هستش که من تغییرش دادم.

    پاسخ
  26. ساعد

    سلام دوست عزیز … کار قشنگی انجام دادی … من از این کنترل استفاده کردم و بخوبی جواب داد منتها به یک مشکل برخوردم :
    زمانی که این کنترل در یک لی اوت مستقل قرار داره به راحتی کار میکنه … مشکل من زمانی شروع شد که تو یک دیالوگ باکس اختصاصی قرارش دادم ( Custom Dialog ) … در این دیالوگ یک دکمه اکی گذاشتم . در لیسنر مربوط به دکمه اکی یک متغیر از نوع PersianCalendar رو برابر با مقدار Datepicker قرار دادم … زمانی که دکمه اکی رو میزنم برنامه کرش میکنه (nullpoint exception ) . خوشحال میشم مشکل منو حل کنی. با تشکر

    پاسخ
  27. کاظمی

    با سلام.
    یه مشکلی که این ابزار دهره اینه که نمیشه تاریخ های ۳۰و ۳۱ ام ماه رو انتخاب کرد و در صورت انتخاب این روزها تاریخ خودبخود روی ۲۹ ام آن ماه ثبت میشود

    پاسخ
    1. zahra

      در فایل PersianDatePicker.java تابع setDisplayPersianDate بصورت ذیل نوشته شده:
      public void setDisplayPersianDate(PersianCalendar displayPersianDate) {
      int year = displayPersianDate.getPersianYear();
      int month = displayPersianDate.getPersianMonth();
      int day = displayPersianDate.getPersianDay();
      if (month > 6 && month 29) {
      day = 29;
      }
      }
      dayNumberPicker.setValue(day);

      minYear = year – yearRange;
      maxYear = year + yearRange;
      yearNumberPicker.setMinValue(minYear);
      yearNumberPicker.setMaxValue(maxYear);

      yearNumberPicker.setValue(year);
      monthNumberPicker.setValue(month);
      dayNumberPicker.setValue(day);
      }
      دستورات if را بدین صورت تغییر دهید:
      if (month > 6 && month 29) {
      day = 29;
      }

      پاسخ
  28. مسعود

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

    از هرکدوم ازین روشهایی که گفتید جلو رفتم ، خطایی ندارم ولی اصلا این ویو نمیاد که بنویسمش حتی کپی میکنم ازینجا کدهای xml رو بازم ناشناس میمونه و خطای زیر رو میده

    The following classes could not be instantiated:
    – ir.smartlab.persindatepicker.PersianDatePicker (Open Class, Show Error Log)

    پاسخ
    1. مسعود

      به صورت لابراری وارد میکنم همین مشکل کماکان هست ولی به صورت دستی فایلای جاوا رو میزارم تو پروژه یبار میبندم و دوباره باز میکنم اکلیپس رو درست شد

      با تشکر

      پاسخ
  29. smo

    خیلی ازتون ممنونم واقعا کمک کردین
    گرچه برای اوردنش تو استودیو خیلی سختی کشیدم تا یادبگیرم ولی از صمیم قلبم ممنونم

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام.
      مشکل از اینجا بود که من در قسمتی از مطلب prefix رو persianDatePicker تعریف کرده بود و در قسمت‌های دیگه app.
      الان مطلب رو ویرایش کردم.
      در فایل xml خودتان xmlns زیر را اضافه کنید:
      xmlns:app=”http://schemas.android.com/apk/res-auto
      مثل نمونه معرفی شده در مطلب. حالا می‌توانید به ویژگی‌های تعریف شده برای PersianDatePicker با استفاده از پیشوند app دسترسی داشته باشید.

      پاسخ
  30. میکائیل

    سلام
    خیلی ممنون که این پرژوه را برای عموم قرار دادید .
    چطور میشه تاریخ گرفته شده از کاربر را به میلی ثانیه تبدیل کرد ؟این امکان هست ؟

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام. PersianDatePicker با استفاده از کامپوننت‌های اندروید نوشته شده و قابل استفاده در جاوا نیست. فقط از PersianCalendar برای تبدیل تاریخ میلادی به شمسی می‌توان استفاده کرد.

      پاسخ
  31. علی

    سلام
    ممنون از لایبراری خوبتون
    یه مشکلی هست . چرا همیشه تاریخ همون روز رو نشون میده ؟ تاریخی که کاربر انتخاب کرده رو نمیده. مشکل از چیه ؟

    با تشکر

    پاسخ
  32. امین

    سلام
    ضمن تشکر از کار قشنگتون
    من توی eclipse اجراش کردم با API 15 ولی نمیدونم چه جوری تو کد نویسی اندروید توی eclipse مقدار انتخابی کاربر رو بدست بیارم

    پاسخ
  33. امین

    سلام
    ضمن تشکر از کار قشنگتون
    من می خوام از توی برنامه اندرویدی با API 15 تو eclipse ازش استفاده کنم
    میخواستم روشی که بتونم تاریخ انتخابی کاربر رو بدست بیارم رو بهم بگید
    با تشکر

    پاسخ
  34. حامد

    سلام جناب بهزادیان نژاد
    کارتون واقعا ریباست. من از این view تو پروژم استفاده کردم و فوق العادست.
    هم تو اکتیویتی ها خوب کار می کنه و هم تو دیالوگ ها.
    جناب بهزادیان نژاد من تو برنامم به یه calenderView شمسی احتیاج دارم اما متاسفانه کلندر ویو خود ایکلیپس میلادیه و تو اینترنت هم هرچی سرچ می کنم چیزی پیدا نمی کنم.
    آیا جایی برای دانلود هست؟
    یا اگه نیست خودم چه جوری می تونم درست کنم؟ مثل همین datePicker که شما درست کردین منم یه کلندر شمسی درست کنم و هم خودم استفاده کنم هم سایر عزیزان اندروید کار. از کجا شروع کنم؟ مراحلش چه جوریه؟
    اگه میشه لطفا جواب رو برام ایمیل هم بفرستین. تشکر از توجهتون و زحمتی که متحمل شدین

    پاسخ
  35. yas

    سلام وقت بخیر
    ممنون از آزمایش خوبتون
    خیلی عالی بود

    متاسفانه بنده نتونستم در دیالوگ استفاده کنم
    بنده به یک date picker dialog فارسی نیاز دارم که با کلیک روی button باز بشه و نتیجه در تکست ویو نمایش داده بشه
    ممنون میشم کمک کنید

    پاسخ
  36. محمد

    سلام , کار بسیار قشنگ و پرکاربردی انجام دادید ممنون.
    فقط یک مشکلی توش پیدا کردم و اینه که موقع گرفتن تاریخ وارد شده برای ماه های ۳۱ روزه , آخرین روز ها یعنی ۳۰ ام و ۳۱ رو همواره ۲۹ ام ذخیره میکنه.

    پاسخ
  37. محمد

    سلام، لطفا به سوالم پاسخ بدید. چجوری میتون در هنگام تغییر تاریخ persiandatepicker یک متود رو اجرا کنم؟ یعنی یه چیزی مثل OnValueChangeListener احتیاج دارم که از خارج از کلاس خود PersianDatePicker برام قابل دسترسی باشه

    پاسخ
  38. Ft

    سلام
    مرسی اقای مهندس
    من رو اندروید استودیو تست کردم/ عالیه و مشکلی نداره /
    در ضمن برای تاریخ که اقای “محمد” میگن برای من درست کار میکنه و مشکلی نداره/
    دمتون گرم!

    پاسخ
  39. ali

    سلام. خسته نباشید.
    ممنون بابت کتابخونه ای که نوشتید.
    چجوری میتونم تاریخی رو که خود کاربر انتخاب کرده رو ازش بگیرم و نشون بدم.
    اینجوری فقط میتونم تاریخ همون روز رو بگیرم ازش.

    پاسخ
  40. hadis

    واقعا چرا فقط تاریخ جاری رو برمیگردونه؟؟؟ اینحوری که اصلا datePickerنیست فقط تاریخ جاریو گرفتینو نشون دادین واقعا مسخرست

    پاسخ
  41. hadis

    باعرض پوزش از کامنت قبلیم 😀
    من کلاس Persian date picker رو بررسی کردم و خوندم و متوجه شدم برای اینکه تاریخ انتخابی رو نشون بده باید لیستنر onDateChageListener رو صدا بزنیم یا به اکتیویتی یا فرگمنتمون implements کنیم و مقدارای جدید و بگیریم .
    ولی با این حال شما تو اموزشتون این نکته رو اشتباه گفته بودین اینم حرف شما
    ۳- هز زمان که خواستید می توانید تاریخی که کاربر انتخاب کرده است را به یکی از دو شکل java.util.Date و ir.smartlab.persindatepicker.util.PersianCalendar بگیرید:
    Date d = persianDatePicker.getDisplayDate();
    // OR
    PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();
    در صورتی که اشتباه گفتین .تشکر میکنم بابت انتشار این دیت پیکر

    پاسخ
  42. ذوالفقار

    سلام.
    بابت کاری که انجام دادین واقعا ممنون و خسته نباشید.
    فقط یه مشکلی، با وجود اینکه توی اپلیکیشن timezone رو تنظیم میکنم باز هم تا ساعت ۴:۳۰ تاریخ تغییر نمیکنه ولی روز هفته تغییر میکنه.
    چک کردم timezone هم درست بود.
    ممنون میشم کمک کنین.

    پاسخ
  43. ابوذر

    سلام آقای بهزادیان
    من PersianDatePicker را به عنوان لایبری به پروژه ام اضافه کردم.حالا باید چه جور ازش استفاده کنم؟برای اینکه نمایش پیدا کنه از چه کدی استفاده کنم؟

    پاسخ
  44. علیرضا

    درود
    نخست بابت کار زیبایی که کردید بهتون تبریک میگم
    من در android-studioیک ویو از کار شما ساختم
    و تاریخ روز رو نشون میده.
    تا اینجاش مشکلی ندارم
    اما من میخوام که تاریخ خاصی نشون بدم .الان وقتی ویو رو میبینم تاریخ روز نشون میده
    وقتی طبق فرمایش شما اینگونه عمل میکنم :‌
    PersianCalendar persianCalendar = new PersianCalendar();
    persianCalendar.setPersianDate(1394, 4, 5);
    persianDatePicker.setDisplayPersianDate(persianCalendar);
    بعد توسط
    Toast.makeText(getApplicationContext(), “” +persianDatePicker.getDisplayDate()+ “: ” + persianCalendar.getPersianLongDateAndTime() , Toast.LENGTH_SHORT).show();
    تاریخ رو نشون میدم
    که میلادی توسط persianDatePiicker.getDisplayDate()و شمسی رو توسط persianCalendar.getPersianLongDateAndTime() نمایش میده
    ولی توی ویو PersianDatePicker کماکان تاریخ روز رو نشون میده و نه تاریخ ۱۳۹۴/۴/۵
    همینطوری سوالی داشتم
    من میخواستم تاریخ رو شمسی رو به صورت میلادی پاس بدم به دیتابیس و یک query اجرا کنم.
    در datePickerخود اندروید بدین صورت عمل میکنم
    Calendar startCalendar = Calendar.getInstance();
    int sDay = datePicker.getDayOfMonth();
    int sMonth = datePicker.getMonth();
    int sYear = datePicker.getYear();
    startCalendar.set(Calendar.YEAR, sYear);
    startCalendar.set(Calendar.MONTH, sMonth);
    startCalendar.set(Calendar.DAY_OF_MONTH, sDay);
    startCalendar.set(Calendar.HOUR, 0);
    startCalendar.set(Calendar.MINUTE, 0);
    startCalendar.set(Calendar.SECOND, 0);
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
    setStartDate(simpleDateFormat.format(startCalendar.getTime()));
    ولی در اینجا من توابع set در ویو اعمال نمیشوند و وقتی toast اجرا میشه تاریخ روز رو نشون میده کماکان
    مشکل من اینه که نمیتونم تاریخی که کاربر ست میکنه رو به فرمت میلادی بگیرم و برگردونم
    درواقع نه ست میشه و نه خونده میشه
    وقتی تاریخ روز رو عوض میکنم و دوباره Toast اجرا میشه تاریخ روز نشون میده
    فقط وقتی تو خود برنامه perisianCalender دستی ست میکنم تاریخ رو درست نشون میده
    مچکرم راه نمایی کنید

    پاسخ
  45. سیدعلیرضاحسینی

    سلام
    کامپوننت خیلی خوبی ایجاد کردین ممنونم ازتون
    میخواستم ببینم امکان نمایش ساعت هم وجود داره تو این کامپوننت یا نه؟
    من نیاز دارم که ساعت رو با محدوویت خاصی نمایش بدم

    ممنون میشم اگه راهنماییم کنید

    پاسخ
  46. مجید

    سلام

    ممنون از زحمتی که کشیدین.

    میخواستم بدونم چجوری میشه تاریخی رو که کاربر انتخاب میکنه (به شمسی) به صورت معادل میلادی هم دریافت کرد.
    من میخوام برای آلارم ازش استفاده کنم و برای همین باید معادل میلادی اون رو بدونم تا بتونم تاریخ رو ست کنم.

    ممنون میشم راهنمایی کنید

    پاسخ
  47. هستی

    سلام و سپاس فراوان بابت کار با ارزشتون
    من از کتابخانه شما در پروژه ام استفاده کردم ولی الان احتیاج دارم که تاریخ انتخاب شده توسط کاربر رو به میلادی تبدیل کنم. لطفا منو راهنمایی کنید.
    با تشکر

    پاسخ
  48. هستی

    با نوشتن کد زیر تاریخ و ساعت رو بصورت میلادی نشون میده ولی من فقط تاریخ رو احتیاچ دارم.
    txtdate.setText(pdp.getDisplayDate().toString());
    چرا اجازه استفاده از getdate رو به من نمیده؟ txtdate.setText(pdp.getDisplayDate().getDate());
    یعنی با نوشتن کد بالا روی getdate یه خط مشکیه
    لطفا منو راهنمایی کنید. ممنون

    پاسخ
  49. یونس قوچی

    سلام
    این View خیلی عالیه
    من با دوستم یک پروژه درسی داریم و میخوایم از این View داخلش استفاده کنیم ولی نمیدونیم چجوری تو جاوا اینو بذاریم
    ما داریم با نت بینز کار میکنیم و داخل یک فرم برای ثبت مشتری جدید باید تاریخ ثبت بذاریم و اگر بشه میخوایم از این View که حالت گرافیکی قشنگی هم داره اونجا استفاده کنیم
    میتونین راهنماییمون کنین ؟

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      این ویو بر اساس NumberPicker اندروید طراحی شده و بنابراین نمی تونید مستقیما ازش در جاوا استفاده کنید. می تونید با الهام از این کد و با استفاده از JSpinner در جاوا کار مشابهی انجام بدید.

      پاسخ
  50. مینا

    با سلام و ارزوی قبولی طاعات
    حناب اقای بهزادیان بخاطر این اموزش از شما سپاسگزارم.
    من به دنبال روشی هستم که بتوانم فقط روز و ماه را از کاربر دریافت کنم. ایا امکانش وجود دارد که کدهای مربوط به سال را حذف کنم و فقط از روز و ماه استفاده کنم؟
    و نهایتا بعد از گرفتن انها روز سپری شده از سال را محاسبه کنم. ایا چنین چیزی امکام پذیر است؟
    ممنوم از راهنمایی بزرگوارانه تان

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام. من هیچ آشنایی با این کتابخانه ندارم و تشخیص صدا کار نکردم. گوگل برای انگلیسی ابزارهای خوبی داره که اونا هم با اینترنت کار می کنن.

      پاسخ
  51. مینا

    سلام
    برای باز کردن این پروژه در اندروئید استدیو با مشکای مواجه شدم. چه کنم؟
    ۰۶-۲۰ ۱۲:۰۴:۵۴٫۴۹۷ ۱۷۲۹-۱۷۴۰/com.google.process.gapps E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method ‘end’ not called
    at dalvik.system.CloseGuard.open(CloseGuard.java:180)
    at java.util.zip.Inflater.(Inflater.java:82)
    at com.android.okhttp.okio.GzipSource.(GzipSource.java:62)
    at com.android.okhttp.internal.http.HttpEngine.unzip(HttpEngine.java:645)
    at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:827)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:439)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java)
    at com.google.android.gms.http.GoogleHttpClient.a(SourceFile:811)
    at com.google.android.gms.http.GoogleHttpClient.a(SourceFile:776)
    at com.google.android.gms.http.GoogleHttpClient.execute(SourceFile:676)
    at com.google.android.gms.http.GoogleHttpClient.execute(SourceFile:660)
    at com.google.android.gms.auth.be.j.a(SourceFile:220)
    at com.google.android.gms.auth.be.appcert.a.a(SourceFile:263)
    at com.google.android.gms.auth.be.appcert.a.a(SourceFile:132)
    at com.google.android.gms.auth.be.appcert.b.a(SourceFile:43)
    at com.google.android.gms.auth.b.b.a(SourceFile:62)
    at com.google.android.gms.auth.b.a.a(SourceFile:120)
    at com.google.android.gms.auth.b.a.a(SourceFile:61)
    at com.google.android.gms.auth.be.cron.AuthCronService.a(SourceFile:44)
    at com.google.android.gms.gcm.al.run(SourceFile:135)

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      این خطا هیچ ارتباطی به این کتابخانه نداره و در کتابخانه okhttp رخ داده که اصلا ازش استفاده نشده. اگه تو پروژه خودتون از okhttp استفاده می کنید کد خودتون رو بررسی کنید در غیر این صورت ممکنه سایر برنامه‌های نصب شده روی گوشی یا ایمولاتور باعث این خطا شده باشند.

      پاسخ
      1. مینا

        سلام اقای بهزادیان
        من اشنایی با این کتابخانه ندارم و از ان استفاده نکردم. صرفا پروژه شما را در گوشی ام s6 سامسونگ و همچنین امولیتر اندروئید استدیو اجرا کردم. و این ارورها

        پاسخ
  52. حسین

    سلام دوست عزیز
    اول اینکه ممنون بابت کار خوبتون
    دوم اینکه من ابن ماژول رو به صورت دستی به اندروید استودیو وارد کردم ولی دو جا ارور میده:
    boolean disableSoftKeyboard = a.getBoolean(R.styleable.PersianDatePicker_disableSoftKeyboard, false);

    displayDescription = a.getBoolean(R.styleable.PersianDatePicker_displayDescription, false);

    این قسمتها رو ارور میده: PersianDatePicker_disableSoftKeyboard و PersianDatePicker_displayDescription

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      فایل attrs.xml که در شاخه values قرار داره این دو تا خط رو اضافه کنید:

      برنامه بعد از نوشتن این مطلب کمی تغییر کرده و باید اصلاح بشه.

      پاسخ
  53. nader

    سلام.

    مشکلی که برای برنامه من وجود داره اینه که هنگام دریافت تاریخ از کاربر همیشه تاریخ جاری رو نشون میده. احتمالا Context اشتباه رو دارم به سازنده PersianDatePicker ارسال میکنم.

    قطعه کد:

    PersianDatePicker pDatePicker= new PersianDatePicker(getApplicationContext());
    PersianCalendar pCal = pDatePicker.getDisplayPersianDate();

    Log.w(“pDate”, pCal.getPersianShortDate().toString());

    در درون یک تسک آسنکرون.

    ممنون میشم راهنمایی کنید،

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      ایراد از کانتکست نیست. شما دارید ویو رو تو کد می‌سازید ولی به صفحه اضافه‌ش نمی‌کنید و تغییرش هم نمی‌دید. این ویو به صورت پیش‌فرض با تاریخ فعلی ساخته می‌شه. برای همین تاریخ جاری را برمی‌گرداند.
      اول این که ویو رو تو XML بسازید، بعد برای گرفتن تاریخ می‌توانید هم از رویداد OnDateChangedListener.onDateChanged(int newYear, int newMonth, int newDay)
      استفاده کنید و هم می‌توانید به سادگی ویو را find کنید و تاریخ انتخاب شده کاربر را با تابع getDisplayDate که شی Date جاوا برمی‌گرداند یا با تابع getDisplayPersianDate که PersianCalendar برمی‌گرداند بگیرید.

      پاسخ
      1. nader

        PersianDatePicker persianDatePicker = (PersianDatePicker) findViewById(R.id.pDatePicker1);
        PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();

        ممنون از راهنمایی سریع. حل شد 🙂

        پاسخ
  54. مینا

    سلام
    من به روش اول این پروژه را به عنوان کتلبخانه به اندروئید استدیو وارد کردم ولی این ارور را می دهد.چه کنم؟
    Error:Execution failed for task ‘:app:prepareDebugDependencies’.
    > Dependency Error. See console for details.

    پاسخ
    1. مینا

      البته این را هم در کنسول پیدا کردم:
      Executing tasks: [:app:generateDebugSources, :app:generateDebugAndroidTestSources]

      Configuration on demand is an incubating feature.

      FAILURE: Build failed with an exception.

      * What went wrong:
      A problem occurred configuring project ‘:app’.
      > A problem occurred configuring project ‘:persianDatePickermaster’.
      > failed to find target with hash string ‘android-21’ in: C:\Users\asus\AppData\Local\Android\sdk

      * Try:
      Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.

      BUILD FAILED

      Total time: 3.523 secs
      Executing tasks: [:app:assembleDebug]

      Configuration on demand is an incubating feature.

      FAILURE: Build failed with an exception.

      * What went wrong:
      A problem occurred configuring project ‘:app’.
      > A problem occurred configuring project ‘:persianDatePickermaster’.
      > failed to find Build Tools revision 23.1.0

      * Try:
      Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.

      BUILD FAILED

      Total time: 1.376 secs
      Executing tasks: [:app:assembleDebug]

      Configuration on demand is an incubating feature.
      WARNING: Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk
      WARNING: Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk
      WARNING: Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk
      WARNING: Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk
      :app:preBuild UP-TO-DATE
      :app:preDebugBuild UP-TO-DATE
      :app:checkDebugManifest
      :app:preReleaseBuild UP-TO-DATE
      :persianDatePickermaster:preBuild UP-TO-DATE
      :persianDatePickermaster:preReleaseBuild UP-TO-DATE
      :persianDatePickermaster:checkReleaseManifest
      :persianDatePickermaster:prepareReleaseDependencies
      :persianDatePickermaster:compileReleaseAidl
      :persianDatePickermaster:compileReleaseRenderscript
      :persianDatePickermaster:generateReleaseBuildConfig
      :persianDatePickermaster:generateReleaseAssets UP-TO-DATE
      :persianDatePickermaster:mergeReleaseAssets
      :persianDatePickermaster:generateReleaseResValues
      :persianDatePickermaster:generateReleaseResources
      :persianDatePickermaster:mergeReleaseResources
      :persianDatePickermaster:processReleaseManifest
      :persianDatePickermaster:processReleaseResources
      :persianDatePickermaster:generateReleaseSources
      :persianDatePickermaster:compileReleaseJavaWithJavac
      :persianDatePickermaster:transformClassesWithDexForRelease
      :persianDatePickermaster:compileReleaseNdk UP-TO-DATE
      :persianDatePickermaster:mergeReleaseJniLibFolders
      :persianDatePickermaster:transformNative_libsWithMergeJniLibsForRelease
      :persianDatePickermaster:processReleaseJavaRes UP-TO-DATE
      :persianDatePickermaster:transformResourcesWithMergeJavaResForRelease
      :persianDatePickermaster:packageRelease
      :app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE
      :app:prepareComAndroidSupportDesign2311Library UP-TO-DATE
      :app:prepareComAndroidSupportRecyclerviewV72311Library UP-TO-DATE
      :app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE
      :app:prepareDebugDependencies
      Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk
      Dependency Persian Date Picker:persianDatePickermaster:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: F:\maxsoft proje\My Life\drafts\Persian Date Picker\persianDatePickermaster\build\outputs\apk\persianDatePickermaster-release-unsigned.apk

      FAILED

      FAILURE: Build failed with an exception.

      * What went wrong:
      Execution failed for task ‘:app:prepareDebugDependencies’.
      > Dependency Error. See console for details.

      * Try:
      Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.

      BUILD FAILED

      Total time: 9 mins 54.613 secs

      پاسخ
  55. MrAli

    سلام و خسته نباشید،
    چطور میشه محدود کرد از امروز به بعد و بشه انتخاب کرد و از امروز به بعد مثلا تا ۷ روز بشه انتخاب کرد

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام. چنین امکانی پیش بینی نشده. پیاده‌سازی آن راحت است! کمی تغییرات لازم دارد!

      پاسخ
  56. محمود

    سلام
    ممنون و خسته نباشید
    من به صورت دستی فایلها رو کپی کردم، حالا بخش تنظیمات رو کجا باید اعمال کنم ؟
    وقتی فایلها رو دستی اضافه می کنم دیگه فایل XML ای محتوی “<ir.smartlab.persindatepicker.PersianDatePicker" وجود نداره

    پاسخ
  57. میلاد

    سلام من تازه شروع کردم به اشنایی با اندروئید و اگر خدا بخواد تا اخر تابستون یه حرکتی برای نوشتن اپ بکنم. حالا میشه بفرمایید از این کتابخئنه چطوری باید استفاده کنم؟ کاش یه پروژه ای تمرینی هم می گذاشتید. میشه بذارید؟ من از گیت هاب دانلودش کردم اما با خوندن تئضیحاتتان چیزی دستگیرم نشد! بابا هوای ما زیر دیپلمی را هم داشته باشید. ممنونم

    پاسخ
  58. محمد

    وقتی به PersianCalendar یک Date میدم که ساعتش کمتر از ۴ و ۳۰ دقیقه باشه تاریخ روز قبل رو میده
    مثلا کد زیر تاریخ روز قبل رو میده:

    PersianCalendar pCal = new PersianCalendar();

    Date d = act.getDate();
    d.setHours(4);

    pCal.setTime(d);

    ولی اگر d.setHours(5); بزنم تاریخ درست رو میده.

    من فک کردم time zone در نظر گرفته نشده
    یه متد هست:
    protected void calculatePersianDate() {
    long julianDate = ((long) Math.floor((getTimeInMillis() – PersianCalendarConstants.MILLIS_JULIAN_EPOCH)) / PersianCalendarConstants.MILLIS_OF_A_DAY);
    long PersianRowDate = PersianCalendarUtils.julianToPersian(julianDate);
    long year = PersianRowDate >> 16;
    int month = (int) (PersianRowDate & 0xff00) >> 8;
    int day = (int) (PersianRowDate & 0xff);
    this.persianYear = (int) (year > 0 ? year : year – 1);
    this.persianMonth = month;
    this.persianDay = day;
    }
    احساس میکنم باید به خط اول time zone رو به میلی ثانیه تبدیل کنم بعد جلوی getTimeInMillis() اضافه کنم (درسته؟) ولی نمیدونم چطوری time zone رو طوری بگیرم که به Long یا int بده
    از getTimeZone استفاده کردم ولی با فرمت TimeZone میده

    امکانش هست راهنماییم کنید ؟؟؟

    پاسخ
  59. حسین

    سلام…
    اول اینکه از شما تشکر میکنم…
    دوم اینکه تاریخ ارسالی از لایه رو که میگیرم، من چطور میتونم در کد جاوا بفهمم سال کبیسه بود یا نه(بدون توجه به ماهی که کاربر انتخاب کرده)؟؟
    مثلا اگر کاربر تاریخ ۱۳۹۵/۰۴/۲۹ رو وارد کرد، در جاوا چطور میشه تشخیص داد که اسفند سال ورودی کاربر یعنی۱۳۹۵، کبیسه هست یا نه؟؟

    پاسخ
  60. اسماعیل سرور

    ممنون از کارتون
    من یه مشکل دارم .تو فرم از تاریخ و تا تاریخ دارم که دوتا ساختم
    منتها مشکل این فقط تاریخ دومی رو بر می گردونه

    پاسخ
  61. شهریاران

    سلام

    وقتی ویجت رو به فایل xml اضافه میکنم ارور rendering problems میده و میگه
    Failed to find the style corresponding to the id -1
    ممنون میشم راهنمایی کنید

    پاسخ
  62. علیرضا

    سلام
    آقا بسیار سپاسگذار واسه این کتابخونه عالی
    فقط من نتونستم تو اندروید استودیو اضافش کنم. اگه میشه یه راهنمایی کن چطوریباید اضافه کنم.
    به عنوان یه new muodule اضافه کردم ولی تو xml

    این رو نمیشناسه

    پاسخ
  63. اشکان

    با سلام و احترام.
    سوالی داشتم از خدمتتان :
    ۱- چطور میتوانم دکمه های بالا و پایین و تاریخ قبل و بعد را مخفی کنم تا ارتفاع کنترل کوچکتر شود؟
    ۲- چطور میتوانم فونت کنترل را تغییر دهم.
    باتشکر

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سلام. اگر از گیت‌هاب دانلود کنید برنامه نمونه به عنوان یک لایبرری از این DatePicker استفاده می‌کنه.

      پاسخ
  64. مهدی

    با سلام هنکام وارد کردن کتابخانه در اکلیپس ارور no project found to import نمایش داده می شود
    برای رفع این ارور چه کاری می تونم انجام بدم؟

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      پروژه رو تبدیل کردم به ماژول اندروید استودیو! توصیه می‌کنم شما هم به استفاده از اندروید استودیو روی بیارید چون همین چند روز پیش پشتیبانی اکلیپس را گوگل به طور کامل متوقف کرد.

      پاسخ
  65. omid

    سلام
    ممنون بابت لایبرری خوبتون
    من هر کاری میکنم از تاریخ جاری رو برمیگردونه

    این کدم:
    final PersianDatePicker persianDatePicker = (PersianDatePicker) dialog.findViewById(R.id.pdpAge);
    final PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();
    Log.i(“LOG”, “Date: ” + pCal.getPersianLongDate().toString());

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

    پاسخ
  66. omid

    این کد رو هم توی نمونه دانلود شده برنامتون از github وارد کردم و فقط تاریخ جاری رو برمیگردونه!!!

    PersianDatePicker pdp = (PersianDatePicker) findViewById(R.id.pdp);
    final PersianCalendar pCal = pdp.getDisplayPersianDate();

    pdp.setOnDateChangedListener(new PersianDatePicker.OnDateChangedListener() {
    @Override
    public void onDateChanged(int newYear, int newMonth, int newDay) {
    Log.i(“LOG”, “Date: ” + pCal.getPersianLongDateAndTime());
    }
    });

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      قطعه کدی که فرستادید مشکل منطقی داره. شما همون اول کار و بعد از ایجاد pdp با فراخوانی متد getDisplayPersianDate یک شیء PersianCalendar رو ازش می‌گیرید که با تاریخ روز جاری مقداردهی شده و بعد هم از همون شیء تاریخ رو می‌پرسید و اون هم تاریخ فعلی رو بهتون میده و نه تاریخی که دیت پیکر نمایش میده.
      احتمالا باید کدتون رو به شکل زیر اصلاح کنید:


      final PersianDatePicker pdp = (PersianDatePicker) findViewById(R.id.pdp);
      pdp.setOnDateChangedListener(new PersianDatePicker.OnDateChangedListener() {

      @Override
      public void onDateChanged(int newYear, int newMonth, int newDay) {
      Log.i("LOG", "New Year: " + newYear);
      Log.i("LOG", "New Month: " + newMonth);
      Log.i("LOG", "New Day: " + newDay);

      Log.i("LOG", "Date: " + pdp.getDisplayPersianDate().getPersianLongDateAndTime());
      // OR
      PersianCalendar pCal = new PersianCalendar();
      pCal.setPersianDate(newYear, newMonth, newDay);
      Log.i("LOG", "Date: " + pCal.getPersianLongDateAndTime());
      }
      }
      );

      پاسخ
  67. alinezamifar.com

    سلام دوست عزیز . ممنون از این ماژول .
    بزرگترین مشکلی که فعلا باهاش دارم اینه که وقتی به اندروید استودیو اضافش می کنم تو لی اوتی که اضافه شده مینویسه
    Failed to find the style corresponding to the id -1
    نمیدونم باید چه کرد . شما راهی سراغ دارین ؟

    پاسخ
  68. zahra

    با سلام
    من از کتابخانه PersianDatePicker-master در برنامه اندروید استفاده کردم ولی متاسفانه ساعت ۱۲ تا ۳:۳۰ تاریخ میلادی و شمسی datepicker یک روز باهم اختلاف دارند
    ساعت ۱۲ تا ۳:۳۰ تاریخ شمسی datepicker به روز نمی شود در صورتی که تاریخ میلادی معادل آن به روز می شود
    PersianCalendar persianCalendar = new PersianCalendar();
    persianCalendar.setTimeZone(TimeZone.getDefault())
    برای تنظیم timezone از دستورات فوق استفاده کردم ولی متاسفانه جواب نگرفتم
    لطفا راهنماییم کنید.
    سپاسگزارم

    پاسخ
  69. hasti

    سلام
    لطفا راجب اختلاف time zone راهنماییم کنید
    timezone برای تاریخ میلادی اعمال میشه ولی برای تاریخ شمسی اعمال نمیشه و این باعث میشه ساعت ۱۲تا ۳:۳۰ تاریخ شمسی انتخاب شده با تاریخ میلادی معادل اون یک روز تفاوت داشته باشه.
    لطفا کمکم کنید
    این مشکل تو برنامه من اساسیه و کل برنامه رو با مشکل مواجه کرده لطفا راهنماییم کنید
    تشکر

    پاسخ
  70. محسم

    سلام و درود به همه … من میخوام خودم از کد های برنامه استفاده کنم و اونو به پروژم اد نکنم .. ولی پوشه src خالی هست وقتی دانلود میکنم

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      سورس کد پروژه تو گیت‌هاب رو تبدیل کردم به یک پروژه اندروید استودیو برای دموی برنامه به همراه ماژول persiandatepicker که سورس‌های تاریخ‌گزین پارسی توی اون هست.
      من خودم الان دانلود کردم و چک کردم و مشکلی نداشت.

      پاسخ
  71. محمد رضا مرادیان

    من وقتی که تابع رو صدا میزدم و داخل Toast نمایش می دادم کل مقدار pCal رو نشون میداد، اما با این روش میشه جداگونه هر مقدار رو گرفت و استفاده کرد:
    PersianCalendar pCal = persianDatePicker.getDisplayPersianDate();
    int year= pCal.getPersianYear();
    String mount= pCal.getPersianMonthName();
    int day= pCal.getPersianDay();
    Toast.makeText(MainActivity.this, “”+day +””+mount+”” + year ,Toast.LENGTH_LONG).show();

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      از متن:

      تعیین محدوده سالها
      به صورت پیش فرض محدوده سالها، از ۱۰ سال قبل از سال فعلی تا ۱۰ سال بعد از آن است. اگر بخواهید می توانید این مقدار را با استفاده از ویژگی yearRange تغییر دهید…

      پاسخ
  72. حامد حیدری

    سلام خیلی ممنون از پکیج فوق العادتون. میخواستم بدونم چجوری میشه اندازه ش روی لایوت رو تغییر داد. من هر کاری کردم کوچکترش کنم امکان پذیر نبود. با تشکر

    پاسخ
  73. Omid

    سلام

    تشکر از کتابخانه با ارزشتون
    به مشکلی برخوردم در خصوص Timezone
    همه کامنت هارو خوندم و خیلیا این مشکل رو داشتن و به یکیش پاسخ داده بودید که از روش زیر عمل کنه:

    pCal.setTimeZone(TimeZone.getDefault());
    و یا اینکه Timezone گوشی رو روی تهران بزاره.

    من هردو روش رو امتحان کردم و نتیجه ای نگرفتم و همچنان اختلاف یک روزه رو در ساعت ۲۴:۰۰ تا ۰۳:۳۰ دارم.
    جالب اینجاست که روز هفته رو درست نشون میده، ولی روز ماه رو توی این سه ساعت و نیم با یک رو تاخیر نشون میده.

    اگر میشه برای این مشکل بنده رو راهنمایی کنید و اگر یک باگ هست بگید که دنبالش نریم.

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      با استفاده از کلاس TimeZones تایم زون رو روی ASIA_TEHRAN یا IRAN ست کنید:

      pCal.setTimeZone(TimeZones.IRAN)

      یا

      pCal.setTimeZone(TimeZones.ASIA_TEHRAN)

      نتیجه رو به من هم بگید. اگر مشکل حل نشد لطفا یه ایشو تو گیت‌هاب باز کنید.

      پاسخ
  74. Omid

    ممنون از جوابت ولی همچنان این مشکل پا برجاست
    از روش های زیر رفتم:

    pCal.setTimeZone(TimeZone.getTimeZone(“Iran”));
    و
    pCal.setTimeZone(TimeZone.getTimeZone(“Asia/Tehran”));
    و
    pCal.setTimeZone(TimeZone.getTimeZone(“GMT+03:30”));

    نمیشد مستقیم از Timezones در setTimeZone استفاده کرد و از کد های بالا که معادل کد شماست استفاده کردم ولی همچنان مشکل پابرجاست!!!

    اگر راهکار دیگه ای به ذهنتون میرسه لطفا راهنمایی کنید.

    توی Github هم یه ایشو باز کردم

    پاسخ
  75. محمدرضا

    سلام خیلی عالی بود من در اندروید استودیو و در یک دیالوگ استفاده کردم .
    ولی یه مشکل کوچک داره اینکه موقع انتخاب نام ماه ها ، app:displayMonthNames=”true” اسفند ماه رو نشان نمیده ولی به صورت عددی درست کار می کنه.

    پاسخ
  76. alinezamifar.com

    دوستانی که در اندروید استودیو با دیالوگ مشکل داشتن باید به شکل زیر استفاده کنن :

    View promptsView;
    PersianDatePicker pdp;
    promptsView = li.inflate(R.layout.mydialog, null);
    pdp = (PersianDatePicker) promptsView.findViewById(R.id.alarmdate);

    پاسخ
  77. فاخته رزازان

    سلام و خسته نباشید.
    من در اندروید استودیو ورژن ۲٫۲٫۳ لایبرری رو ایمپورت کردم و به خطایی برنخوردم ولی بعد از اضافه کردن ‘ xmlns:persianDatePicker=”http://schemas.android.com/apk/res-auto”‘
    در فایل Layout اخطار this namespace is never used میدهد و بعد از افزودت کدهای

    در لایه بعد از اجرا خطای ‘has stoped working’ میدهد.
    لطفا راهنمایی کنید

    پاسخ
  78. علی

    سلام خدمت استاد عزیز! لطفا آموزش ایمپورت و استفاده این کتابخانه ارزشمند رو در اندروید استودیو هم قرار بدید چون بنده هر چه تلاش کردم نتونستم داخل اندورید استودیو ازش استفاده کنم.

    پاسخ
  79. فاطمه

    چطوری توی ایکلیپس این پروژه رو import کنم و ازش استفاده کنم؟ چون الان توی github برای اندروید استودیوش فقط هست

    پاسخ
  80. آرش قاسمی

    سلام

    اولا خسته نباشی مهندس
    دوما خیلی لطف کردی ک به اشتراک گذاشتی ( واقعا ارزشمنده )

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

    پاسخ
  81. سعید

    درود بر شما و سپاس بابت آموزش کاربردی که قرار دادید فقط یک سوال …. در روش اول بعد از دانلود کردن از سایت گیت هاب برای ایمپورت کردن بعنوان یک پروژه به ایکیلیپس چون که ساختار این پروژه مطابق با اندروید استادیو هست نمیشه ایمپورت کنم و زمان ایمپورت No Project Founds arr found to Import را نمایش میدهد و در مورد روش دوم هم آیا خروجی این برنامه یک کامپوننت میشود که مثلا بتونم توی یکی از layout های مورد نظرم اضافه کنم؟
    با سپاس

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      این دو روش مربوط به زمان انتشار نسخه اول برنامه است که در اکلیپس وارد می‌شد. در نسخه دوم، یک پروژه اندروید استودیو است که یک ماژول داره که خود کتابخونه است و یک ماژوا داره که برنامه نمونه است. برنامه نمونه نحوه کار با این کتابخونه رو نشون میده

      پاسخ
  82. فرامرزی

    با سلام
    من در اندروید استادیو از این کامپوننت تاریخ استفاده کردم و به درستی اجرا شد.
    خیلی خوب و عالی بود و به درستی کار کرد. صمیمانه سپاسگذارم

    پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *