مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

ذخیره سازی تاریخ شمسی

  • جمعه 24 دی 1395
  • 21:23
تشکر میکنم

با سلام.

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

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

حالا اگر تاریخ رو به میلادی ذخیره کنم چطور در select اونو بصورت شمسی نشون بدم؟

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

با تشکر

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

تعداد پاسخ ها : 9 پاسخ
کاربر سایت

scorpan

عضویت از 1393/07/14

  • جمعه 24 دی 1395
  • 22:19

سلام دوست عزیز میتونی از این متد استفاده کنی که به صورت extension  هست 

  public static DateTime ToPersianDate(this DateTime dt)
    {
        PersianCalendar pc = new PersianCalendar();
        int year = pc.GetYear(dt);
        int month = pc.GetMonth(dt);
        int day = pc.GetDayOfMonth(dt);
        int hour = pc.GetHour(dt);
        int min = pc.GetMinute(dt);

        return new DateTime(year, month, day, hour, min, 0);
    }

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • شنبه 25 دی 1395
  • 16:51

ممنون دوست عزیز

منظورم در دستور select هست

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

با تشکر

کاربر سایت

scorpan

عضویت از 1393/07/14

  • شنبه 25 دی 1395
  • 17:06

شما توی دستور select در SQL فکر نکنم بتونید این کارو انجام دهید ؟

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

مانند : 

var model1 = model.OrderByDescending(p => p.ExpireDateMiladi).Single().ExpireDateMiladi.Value.ToMiladiDate();

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • شنبه 25 دی 1395
  • 17:39

ببخشید این دستور رو توضیح می دید؟

کاربر سایت

scorpan

عضویت از 1393/07/14

  • شنبه 25 دی 1395
  • 18:10

این دستورات entity هست . شما بگو از چه متدی استفاده میکنی ? 

وب یا ویندوز ؟ واینکه ارتباط با دیتا بیس ADO  هست یا Linq یا ..... ؟ 

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • شنبه 25 دی 1395
  • 18:38

برنامه وب و ارتباط با linq هست

تا model.OrderByDescending(p => p.ExpireDateMiladi) رو می فهمم

از single تا آخر رو میشه توضیح بدی؟

کاربر سایت

scorpan

عضویت از 1393/07/14

  • شنبه 25 دی 1395
  • 18:43

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

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

من توی MVC دارم توضیح میدم . اگر MVC کار میکنید کدهاشو بزارم که متوجه بشید ؟

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • شنبه 25 دی 1395
  • 18:49

از mvc استفاده می کنم

ممنون می شم کد بزارید

کاربر سایت

scorpan

عضویت از 1393/07/14

  • شنبه 25 دی 1395
  • 19:04

توی این مثال یه اکشن داریم به اسم show user که یک لیستی از یوزرها  میده به مدل : 

        public ActionResult ShowUsers()
        {
            var user = db.Users.Where(p => p.ID == id).tolist();
      
            return View(user);
        }

ویو همین اکشن که باید اطلاعات رو نمایش بده به این صورت میشه  : 

    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.licenseNum)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.RegisterationNum)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.NationalIDCo)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.EconomicCode)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CompanyEmail)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.StaeID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CityID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CEOBirthday)
            </th>

            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.licenseNum)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.RegisterationNum)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.NationalIDCo)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.EconomicCode)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CompanyEmail)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.State.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.City.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CEOBirthday.Value.ToMiladiDate())
                </td>
                <td>
                
                    @Html.ActionLink("نمایش", "ShowUsers", new { id = item.ID }) 
                    @Html.ActionLink("تایید", "AdminAccept", new { id = item.ID , name = item.UserName}) |
                    @Html.ActionLink("حذف", "DeleteUser", new { id = item.ID })
                </td>
            </tr>
        }

    </table>
   

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

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

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Mvc;


public static class Utilty
{
    public static DateTime ToMiladiDate(this DateTime dt)
    {
        PersianCalendar pc = new PersianCalendar();
        return pc.ToDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0, 0);

    }
}

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)