# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا > سوال: تبدیل تاریخ میلادی به شمسی در جاوا

## ravand

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

----------


## ravand

این مشکلم حل شد ولی یه مشکل جدید برام پیش امد.
شما در نظر بگیرید امروز تاریخ :1391-7-8 هست . من برنامه ای نوشتم که اگر امروز تاریخ 1391-7-8 باشه یه پیام are بده وگرنه پیام na.
ولی نمیدونم چرا هر کاری میکنم این اتفاق نمی افته.
package testi;
public class CalendarConversionDemo {
  public static void main(String[] args) {
    Main Main = new Main();
String zaman;
zaman=Main.getIranianYear()+"-"+Main.getIranianMonth()+"-"+Main.getIranianDay();
System.out.println(zaman);
if(zaman=="1391-7-8"){
System.out.println("are");
} else {
System.out.println("na");
  }
}
}

----------


## spiderman200700

کاش خروجی این کد رو هم میذاشتی که بدونیم باید چطوری کمکت کنیم.

----------


## ravand

اینم خروجی:


```
1391-7-8
na
```

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

----------


## ravand

هر دو فایل رو ضمیمه کردم:
shamsi.zip

----------


## ravand

کلا تاریخ این مشکل رو داره. اولش فکر میکردم فقط تاریخ شمسی اینطوریه ولی حالا فهمیدم تاریخ میلادی هم همینطوره ببینید:
package testi; 
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Main {
  public static void main(String[] args) {
	   DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	   Date date = new Date();
	   System.out.println(dateFormat.format(date));
           String zaman;
                   zaman=dateFormat.format(date);
           if(zaman=="2012-09-30"){
System.out.println("are");
} else {
System.out.println("na");
  }
  }
}
خروجی:


```
2012-09-30
na
```

----------


## ravand

بالاخره با تلاش فراوان فهمیدم مشکل کار از کجاست:
package testi; 
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.text.ParseException;
public class Main {
  public static void main(String[] args) {
	   DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	   Date date = new Date();
	   System.out.println(dateFormat.format(date));
           String zaman;
           zaman=dateFormat.format(date);    
           String karbar;
           karbar="2012-09-30";
           if (zaman.compareTo(karbar)==0)
           {
           System.out.println("are");
           } else {
           System.out.println("na");
           }
           }
}
الان کد بالا در خط زیر نگاه کنید:
if (zaman.compareTo(karbar)==0)
این خط داره میگه اگه نسبت بین دو متغییر صفر باشد یعنی هیچ اختلافی بین دو مقدار داده شده به متغییر نباشد پیام are را چاپ گن وگرنه پیام na را چاپ کن.

----------


## ravand

:قهقهه:  چقدر زبان جاوا مزخرفه .
حالا اینا رو توی php ببینید:
<?php
$zaman=Date('Y-m-d');
if($zaman=="2012-09-30")
{
echo "are";
}
else
{
echo "na";
}
?>
واقعا php از نظر سادگی عالیه  :لبخند گشاده!:

----------


## DigitalRain

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

----------


## ravand

> اشکال نداره از کدتون استفاده کنم؟ (فرهنگ احترام به لایسنس :دی)


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

----------


## محمد فدوی

http://sourceforge.net/projects/persiancalendar/  و http://stackoverflow.com/questions/1...alendar-in-and رو ببین. فکر کنم کمکت کنه... :-)

----------


## L u k e

يه كتابخونه خيلي ساده نوشتم تو github قرار دادم تا بتونيد ازش استفاده كنيد.
https://github.com/MohsenK/JPersianDate

----------


## hassanmosavi

حالا که بخیر گذشت اما برای مقایشه رشته بهتره از 

.equals()
استفاده کنی

----------


## mr_stone

> چقدر زبان جاوا مزخرفه .
> حالا اینا رو توی php ببینید:
> <?php
> $zaman=Date('Y-m-d');
> if($zaman=="2012-09-30")
> {
> echo "are";
> }
> else
> ...


هر چیزی یک بهایی داره!! بهای این سختی ها هم کم شدن خطاهای منطقی و غییرر منطقی و افزایش شدید امنیت و توانایی حل کردن error ها قبل از کامپایل و .... است که توی همشون PHP حرفی برای گفتن نداره!! :D

----------


## vahid-p

اینجا درسته به نظر سختتر میاد ولی اگر مفهوم شی گرایی رو به خوبی میدونستید این مشکل پیش و پا افتاده براتون پیش نمیومد که از == برای مقایسه دو مقدار استفاده کنید ( اوایل همه این مشکل رو دارند چون هنوز مفهوم رو نگرفتن، وگرنه برای جلوگیری از اشتباهات اینچنینی برای مقایسه دو رشته هم از .eqauls استفاده میکنند گرچه استثنا == هم جواب میده برای رشته ). در شی گرایی به جز متغیرهای نوع اولیه بقیه == به منظور برابر بودن اشیا است نه مقادیر آن. فرض کنید یک شی داشته باشید که دارای یک کلید و یک مقدار باشه. حالا شما میگید اگر x==y بود. خب این از کجا بدونه منظورتون کلیده یا مقدار؟ کاری که شما کردید شبیه به همینه.
در صورتی که x==y یعنی هر دو شی یکی هستند و به یک جا در حافظه اشاره میکنند.

گرچه کاربرد پی اچ پی و جاوا بسیار متفاوته و اینجور مقایسه خیلی سطحیه. اگه اینطور باشه C++‎‎‎ و python و C#‎‎‎ و... همگی مزخرف میشن و php و javascript و... میشن عالی!
اتفاقا از نظر من php از این نظر خیلی بده ( نگم مزخرف ) که نوع متغیر ها، خروجی توابع و ... چک نمیشه و در حین برنامه نویسی مشخص نیست، و این باعث میشه خیلی به دردسر بیفتی. ولی وقتی همه چیز نوعش مشخصه، میدونی چی رو میشه کجا استفاده کرد و چی رو نه!

موفق باشید.

----------


## ravand

> هر چیزی یک بهایی داره!! بهای این سختی ها هم کم شدن خطاهای منطقی و غییرر منطقی و افزایش شدید امنیت و توانایی حل کردن error ها قبل از کامپایل و .... است که توی همشون PHP حرفی برای گفتن نداره!! :D


این تاپیک رو نمیدونم چرا بالا آوردید. این تاپیک مال خیلی وقت پیشه!
شما خبر نداری! چند وقته که بحث سر اینه که جاوا خیلی ناامن هست. حالا شما میگی php نامنه؟  :لبخند گشاده!: 
به نظرم مزیت یه زبان برنامه نویسی به اینه که ادم بتونه یه چیزی رو به ساده ترین صورت بنویسه. نه اینکه برای یه چیز پیش پاافتاده خودش رو بکشه. من پایتون و php رو می پسندم چون بهترین مزیتشون ساده بودنشونه. همه ی زبان های برنامه نویسی مشکل ناامن بودن رو دارن. بحث سر اینه که شما چطوری بنویسی که برنامه ات مشکل امنیت نداشته باشه.

----------


## dasssnj

> چقدر زبان جاوا مزخرفه .
> حالا اینا رو توی php ببینید:
> <?php
> $zaman=Date('Y-m-d');
> if($zaman=="2012-09-30")
> {
> echo "are";
> }
> else
> ...


شما جاوا را بلد نیستی عزیز که از == استفاده می کنی در حالی که متد equals برای همین وقتاست. در ضمن php هم خیلی چیزاش را از جاوا داره :قهقهه:

----------


## ravand

> شما جاوا را بلد نیستی عزیز که از == استفاده می کنی در حالی که متد equals برای همین وقتاست. در ضمن php هم خیلی چیزاش را از جاوا داره


شما اصلا تو باغ نیستی داداش!
اصلا درست حرف های ما رو خوندی؟
در ضمن php از جاوا گرفته نشده. از سی پلاس پلاس گرفته شده.

----------


## محمد فدوی

> چند وقته که بحث سر اینه که جاوا خیلی ناامن هست.


هر فریموورکی حفره های امنیتی خاص خودشو داره... برای حرفتون سند ذکر کنید.

بازم بحثای پر تعصب و بی معنی... هر زبونی با توجه به حیطه کاریش، معماری میشه و به نوبه خودش یک سری نقاط ضعف و قوت ایجاد میکنه.
PHP یه *زبان اسکریپتی* هستش و مبتنی بر افزایش سرعت توسعه و راحتی و دم دستی بودن برای توسعه دهندش طراحی شده. به همین دلیله که یکی از بهترین راه های *تنهایی* پول درآوردن از برنامه نویسی (در ایران) PHP هستش، چون بدون گرفت و گیره!  :لبخند: 

اما پروژه های سازمانی غول آسایی هم هستن که تو این مقیاس ها نمیگنجن. Java EE برای انجام پروژه های سازمانی عظیم تخصص پیدا کرده. توی این پروژه ها با حجم پردازشی نجومی اهمیت داره که شما تا حد امکان صرفه جویی کنی و جایی که استفاده از یه متغیر short کافیه از long استفاده نکنی! (چیزی که PHP ازش بی بهرست) ... فکر کنم دلیل سخت گیری های جاوا (و دات نت و ...) روشنه اینجوری.

نمیگم PHP برای انجام پروژه های عظیم نامناسبه و جاوا برای انجام پروژه های کوچیکتر. تخصصشون رو بیان کردم.
به نظرم اصلا حرف درستی نیست که با قدرت بگیم یکیشون بهتره...

موفق باشید.

----------


## ravand

> هر فریموورکی حفره های امنیتی خاص خودشو داره... برای حرفتون سند ذکر کنید.
> 
> بازم بحثای پر تعصب و بی معنی... هر زبونی با توجه به حیطه کاریش، معماری میشه و به نوبه خودش یک سری نقاط ضعف و قوت ایجاد میکنه.
> PHP یه *زبان اسکریپتی* هستش و مبتنی بر افزایش سرعت توسعه و راحتی و دم دستی بودن برای توسعه دهندش طراحی شده. به همین دلیله که یکی از بهترین راه های *تنهایی* پول درآوردن از برنامه نویسی (در ایران) PHP هستش، چون بدون گرفت و گیره! 
> 
> اما پروژه های سازمانی غول آسایی هم هستن که تو این مقیاس ها نمیگنجن. Java EE برای انجام پروژه های سازمانی عظیم تخصص پیدا کرده. توی این پروژه ها با حجم پردازشی نجومی اهمیت داره که شما تا حد امکان صرفه جویی کنی و جایی که استفاده از یه متغیر short کافیه از long استفاده نکنی! (چیزی که PHP ازش بی بهرست) ... فکر کنم دلیل سخت گیری های جاوا (و دات نت و ...) روشنه اینجوری.
> 
> نمیگم PHP برای انجام پروژه های عظیم نامناسبه و جاوا برای انجام پروژه های کوچیکتر. تخصصشون رو بیان کردم.
> به نظرم اصلا حرف درستی نیست که با قدرت بگیم یکیشون بهتره...
> ...


یه جوری حرف میزنی که انگار من گفتم php بهتره. من  هم میگم نمیشه گفت کدوم بهتره چون هر کدوم یه سری مزایا داره.
من گفتم php از نظر سادگی بهتره. برای همین توی پست اولم گفتم جاوا مزخرفه.
من توی سادگی php رو میپسندم و چون سادگی خودش رو داره برای همین به زبان های دیگه ترجیح میدم والبته php با وجود سادگی امکانات و قدرت زیادی داره . آموزش های زیادی هم داره. و..

----------


## vahid-p

> شما خبر نداری! چند وقته که بحث سر اینه که جاوا خیلی ناامن هست. حالا شما میگی php نامنه؟


یه بازه خیلی کوچک چنین حرفی بود که برطرف شد. اینکه جاوا خیلی ناامن هست رو از کجا آوردی؟! اتفاقا جاوا رو به خاطر امنیت بالایی که داره هم استفاده میکنند. مثلا گوگل کروم مرورگر خیلی امنیه ولی خب هر نرم افزاری ممکنه باگ و محل نفوذ داشته باشه، دلیل نمیشه بگی "خیلی" "ناامن"! وگرنه تو مهمترین پروژه ها ( مثلا پروژه های بانکی و... ) ازش استفاده نمیشد!




> من گفتم php از نظر سادگی بهتره. برای همین توی پست اولم گفتم جاوا مزخرفه.


اتفاقا این سادگی ظاهری که کد خیلی خواناتر به نظر میاد، برای برنامه نویس بسیار دردسر ساز تر میشه. مثلا فرض کن یک کانستراکتور در php داشته باشی، شما هر چی قرار بدی، نمیشه قبل از اجرا به اشتباه یا درست بودنش پی ببری چون نوعش مشخص نیست. ولی وقتی که اجرا میشه صدها اررور میده. و برای همین همیشه باید بری از اینترنت یا هر مرجع دیگه ای که این دقیقا چه پارامترهایی میگیره! ولی برای جاوا از اول مشخصه و قبل از اجرا تمام خطاهای اینچنینی بر طرف میشه.

راستی این کد php ای که نوشتید در جاوا هم خیلی متفاوت تر نیستا! شما اومدید شلوغش کردید و تو هر سطر یه چیزی تعریف کردید و متغیرهای مختلف.
کد php :
<?php
$zaman=Date('Y-m-d');
if($zaman=="2012-09-30")
{
echo "are";
}
else
{
echo "na";
}
?>




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

        String zaman = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        if (zaman.equals("2012-09-30")) {
            System.out.println("are");
        } else {
            System.out.println("na");
        }


در کد php شما الان میدونید که Date('...') بهتون یه رشته میده و اونوقت اومدید با یک رشته مقایسه کردید. ولی فرض کنید یه متغیر از نوع زمان میداد اونوقت باز هم هیچ ایرادی در برنامتون ایجاد نمیشد! تا بیایید اجرا کنید و بفهمید که اشتباه بوده! حالا من به این میگم سردرگمی، از نظر یکی سادگیه.
بلاخره سلایق متفاوته

----------


## Amin1991-2012

سلام دوستان

فک کنم از بحث این تاپیک جداشدیناااا، آخرش من نفهمیدم چجوری باید تاریخ میلادیو به شمسی تبدیل کرد؟لطفا کدشو بذارینو توضیح بدین من بفهمم چجوریه!!!

----------


## vahid-p

> فک کنم از بحث این تاپیک جداشدیناااا، آخرش من نفهمیدم چجوری باید تاریخ  میلادیو به شمسی تبدیل کرد؟لطفا کدشو بذارینو توضیح بدین من بفهمم  چجوریه!!!


کدش که تو پست 12 همین تاپیک لینکشو دادن. لینکش این بود : https://github.com/MohsenK/farstime

----------


## Amin1991-2012

وقتی داشتم توی تاپیکا میگشتم به یه پروژه برخوردم که این کارو میکرد و به نظرم خوب اومد.
اینم آدرسش:

https://barnamenevis.org/showthread.p...=1#post1421349

البته خودمم کلاسشو نوشتم.کلاس من خیلی خیلی راحت تر و ساده تره!!!!!!!!!!!!

دوستان موفق باشید.

----------


## vahid-p

اینم خیلی سادست و در کل دو کلاس بیشتر نیست.
کافی بود با نت بینز کل فولدری که دانلود کردی رو باز کنی.
من به صورت یه پروژه برات گذاشتم که کتابخونه لازمش رو هم همراهش داره. البته در مسیر dist/lib کتابخونه joda-time قرار داره که باید تو پروژت قسمت لایبرری قرار بدی.
*فایلش رو ضمیمه کردم.*

اینم یه کد برای استفاده از این کلاس. تبدیل میلادی به شمسی و شمسی به میلادی : ( البته تو فایل هم موجوده )

package main;

import com.github.jpersiandate.PersianDateTime;

public class Main {

    public static void main(String[] args) {
        System.out.println("---- Tabdil Miladi be Shamsi ----");
        PersianDateTime pd = PersianDateTime.valueOf(new org.joda.time.DateTime(2014, 7, 18, 10, 20, 30));
        System.out.println("Persian Date : " + pd.toString());
        System.out.println("Gregorian Date : " + pd.toGregorianDate());
        
        System.out.println("\n\n---- Tabdil Shamsi be Miladi ----");
        PersianDateTime pdt=new PersianDateTime(1393, 4, 27, 0, 0, 0);
        System.out.println("Gregorian Date : " + pdt.toGregorianDate());
    }

}

----------


## igifar

سلام 
کسی تقویم فارسی جاوا رو نداره مثل C#‎‎‎‎ باشه
 با combo box کار کنه

----------


## rezasa341

با سلام در لینک زیر کامپوننتی DatePicker shamsi وجود دارد که میتوان به  پروژه java , Netbeans اضافه نمود و در پروژه ها به راحتی از آن استفاده  کرد :چشمک:  :چشمک:  :چشمک:  :چشمک:  :چشمک:  :چشمک:  :چشمک:  :چشمک:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق: 

http://sunfile.sellfile.ir/prod-4207...+Netbeans.html

----------

