Возраст форматирования C # - относительно дней, недель, месяцев - лет - PullRequest
7 голосов
/ 04 февраля 2011

Я работаю над некоторым медицинским программным обеспечением, и мне необходимо вывести все возрасты очень специфическим образом, основываясь на следующих правилах:

 If under 6 Weeks old :  ###D (Number of Days)
If under 6 Months old :  ###W (Number of Weeks)
 If under 2 Years old :  ###M (Number of Months)
 If above 2 Years old :  ###Y (Number of Years)

Использование C # Я пытаюсь найти простой способ сделать это, просто используя дату рождения человека, любая помощь будет принята с благодарностью.

Ответы [ 4 ]

7 голосов
/ 04 февраля 2011

Вчера я работал над чем-то похожим, но что-то подобное должно соответствовать вашим потребностям: ( при условии, что 7 дней недели, 31 день месяца, 365 дней года и т. Д. )

Пересмотренный метод: (Исправлено согласно советам Боба)

public static string ConvertAge(DateTime dob)
    {
        DateTime today = DateTime.Today;
        string fmt = "{0:0##}{1}";

        //Greater than 2 Years old - Ouput Years
        if (dob <= today.AddYears(-2)) 
            return string.Format(fmt, (dob.DayOfYear <= today.DayOfYear) ? 
            (today.Year - dob.Year) : (today.Year - dob.Year)-1, "Y");
        //Less than 2 Years - Output Months
        if (dob < today.AddMonths(-2)) 
            return string.Format(fmt, (dob.DayOfYear <= today.DayOfYear) ? 
            (today.Year - dob.Year) * 12 + (today.Month - dob.Month) : 
            ((today.Year - dob.Year) * 12 + (today.Month - dob.Month))-1 , "M");
        //Less than 2 Months - Output Weeks
        if (dob < today.AddDays(-2 * 7)) 
            return string.Format(fmt, (today - dob).Days / 7, "W");
        //Less than 2 Weeks - Output Days
        return string.Format(fmt, (today - dob).Days, "D");
    }

Предыдущий метод:

public string ConvertAge(DateTime dateOfBirth)
        {
            int daysOld = (DateTime.Now - dateOfBirth).Days;

            //Age < 6 Weeks
            if (daysOld < (6 * 7)) 
                return String.Format("{0:0##}{1}", daysOld, 'D'); 
            //Age < 6 Months
            else if (daysOld < (6 * 31)) 
                return String.Format("{0:0##}{1}", daysOld/7, 'W');
            //Age < 2 Years
            else if (daysOld < (2 * 365)) 
                return String.Format("{0:0##}{1}", daysOld / 31, 'M');
            //Age >= 2 Years
            else 
                return String.Format("{0:0##}{1}", daysOld / 365, 'Y');
        }

Надеюсь, это поможет!

3 голосов
/ 04 февраля 2011

Тип DateTime может быть вычтен из других DateTimes, в результате чего TimeSpan представляет разрыв.Попробуйте это:

var timeAlive = DateTime.Today - dateOfBirth.Date;

Затем посмотрите на Дни, Месяцы и Годы (разделите Дней на 7 для недель) timeAlive и отформатируйте соответственно.

2 голосов
/ 04 февраля 2011

Следующее не делает никаких предположений о днях / месяцах или году.
С другой стороны, оно не совместимо с Y3K.

    public static string GetAge (DateTime dob) {
        DateTime today = DateTime.Now;
        string fmt = "{0:0##}{1}";

        if (dob < today.AddYears(-2)) return string.Format(fmt, today.Year - dob.Year, "Y");
        if (dob < today.AddMonths(-6))return string.Format(fmt, (today.Year - dob.Year)*12 + (today.Month - dob.Month), "M");
        if (dob < today.AddDays(-6 * 7)) return string.Format(fmt, (today - dob).Days/7, "W");
        return string.Format(fmt, (today - dob).Days, "D");
    }
0 голосов
/ 04 февраля 2011

Вы можете получить объект, представляющий текущий возраст пользователя, с помощью простого вычитания:

TimeSpan age = DateTime.Now - dateOfBirth;

И тогда вам нужно просто выполнить несколько предложений if

if (age.TotalDays < 6 * 7) // 6 weeks
    // ...
else if (age.TotalDays < 6 * 30) // 6 months
    // ...
// et cetera

Youдолжен быть в состоянии выяснить, как сделать ваше форматирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...