public static string ConvertToRelative(DateTime localDateTime, DateTime localNow, RelativeDateOptions flags = 0)
        {
            // This method is intended to return a human readable output,
            // so this means that the dates passed as input to this method must be local to the user.
            if (localDateTime.Kind != DateTimeKind.Unspecified)
                throw new ArgumentException("'localDateTime' must be expressed in practice time-zone.", "localDateTime");

            if (localNow.Kind != DateTimeKind.Unspecified)
                throw new ArgumentException("'localNow' must be expressed in practice time-zone.", "localNow");

            // todo: WTF??? this is throwing away needed information for this method... it needs the seconds data.
            localDateTime = localDateTime.Date;
            localNow = localNow.Date;

            TimeSpan span = localNow - localDateTime;

            bool isPast = span.TotalMinutes > 0;
            double totalSeconds = Math.Abs(span.TotalSeconds);

            // a representação textual do DateTime
            String spelledDate = null;

            bool requiresPreposition = true;

            if ((flags & RelativeDateOptions.ReplaceToday) == RelativeDateOptions.ReplaceToday && localDateTime.Date == localNow.Date)
            {
                requiresPreposition = false;
                spelledDate = "hoje";
            }
            else if ((flags & RelativeDateOptions.ReplaceYesterdayAndTomorrow) == RelativeDateOptions.ReplaceYesterdayAndTomorrow && localDateTime.Date == localNow.Date.AddDays(1))
            {
                requiresPreposition = false;
                spelledDate = "amanhã";
            }

            else if ((flags & RelativeDateOptions.ReplaceYesterdayAndTomorrow) == RelativeDateOptions.ReplaceYesterdayAndTomorrow && localDateTime.Date == localNow.Date.AddDays(-1))
            {
                requiresPreposition = false;
                spelledDate = "ontem";
            }
            else if (totalSeconds < 172800.0)
            {
                if (totalSeconds < 60.0)
                    spelledDate = ((Math.Abs(span.Seconds) == 1) ? "um segundo" : (Math.Abs(span.Seconds) + " segundos"));

                else if (totalSeconds < 120.0)
                    spelledDate = "um minuto";

                else if (totalSeconds < 2700.0)
                    spelledDate = (Math.Abs(span.Minutes) + " minutos");

                else if (totalSeconds < 5400.0)
                    spelledDate = "uma hora";

                else if (totalSeconds < 86400.0)
                    spelledDate = (Math.Abs(span.Hours) + " horas");

                else if (totalSeconds < 172800.0)
                    spelledDate = "um dia";
            }
            else if (totalSeconds < 2592000.0)
            {
                requiresPreposition = true;
                spelledDate = (Math.Abs(span.Days) + " dias");
            }
            else if (totalSeconds < 31104000.0)
            {
                requiresPreposition = true;
                int num2 = Convert.ToInt32(Math.Floor((double)(((double)Math.Abs(span.Days)) / 30.0)));
                spelledDate = ((num2 <= 1) ? "aprox. um mês" : ("aprox. " + num2 + " meses"));
            }
            else
            {
                int num3 = Convert.ToInt32(Math.Floor((double)(((double)Math.Abs(span.Days)) / 365.0)));
                requiresPreposition = true;
                spelledDate = ((num3 <= 1) ? "aprox. um ano" : ("aprox. " + num3 + " anos"));
            }

            if (requiresPreposition & ((flags & RelativeDateOptions.IncludeSuffixes) == RelativeDateOptions.IncludeSuffixes) && isPast)
                spelledDate += " atrás";

            if (requiresPreposition & ((flags & RelativeDateOptions.IncludePrefixes) == RelativeDateOptions.IncludePrefixes))
                if (isPast)
                    spelledDate = "há " + spelledDate;
                else
                    spelledDate = "daqui a " + spelledDate;

            return spelledDate;
        }
Exemple #2
0
        public static string ConvertToRelative(DateTime localDateTime, DateTime localNow, RelativeDateOptions flags = 0)
        {
            // This method is intended to return a human readable output,
            // so this means that the dates passed as input to this method must be local to the user.
            if (localDateTime.Kind != DateTimeKind.Unspecified)
            {
                throw new ArgumentException("'localDateTime' must be expressed in practice time-zone.", "localDateTime");
            }

            if (localNow.Kind != DateTimeKind.Unspecified)
            {
                throw new ArgumentException("'localNow' must be expressed in practice time-zone.", "localNow");
            }

            // todo: WTF??? this is throwing away needed information for this method... it needs the seconds data.
            localDateTime = localDateTime.Date;
            localNow      = localNow.Date;

            TimeSpan span = localNow - localDateTime;

            bool   isPast       = span.TotalMinutes > 0;
            double totalSeconds = Math.Abs(span.TotalSeconds);

            // a representação textual do DateTime
            String spelledDate = null;

            bool requiresPreposition = true;

            if ((flags & RelativeDateOptions.ReplaceToday) == RelativeDateOptions.ReplaceToday && localDateTime.Date == localNow.Date)
            {
                requiresPreposition = false;
                spelledDate         = "hoje";
            }
            else if ((flags & RelativeDateOptions.ReplaceYesterdayAndTomorrow) == RelativeDateOptions.ReplaceYesterdayAndTomorrow && localDateTime.Date == localNow.Date.AddDays(1))
            {
                requiresPreposition = false;
                spelledDate         = "amanhã";
            }

            else if ((flags & RelativeDateOptions.ReplaceYesterdayAndTomorrow) == RelativeDateOptions.ReplaceYesterdayAndTomorrow && localDateTime.Date == localNow.Date.AddDays(-1))
            {
                requiresPreposition = false;
                spelledDate         = "ontem";
            }
            else if (totalSeconds < 172800.0)
            {
                if (totalSeconds < 60.0)
                {
                    spelledDate = ((Math.Abs(span.Seconds) == 1) ? "um segundo" : (Math.Abs(span.Seconds) + " segundos"));
                }

                else if (totalSeconds < 120.0)
                {
                    spelledDate = "um minuto";
                }

                else if (totalSeconds < 2700.0)
                {
                    spelledDate = (Math.Abs(span.Minutes) + " minutos");
                }

                else if (totalSeconds < 5400.0)
                {
                    spelledDate = "uma hora";
                }

                else if (totalSeconds < 86400.0)
                {
                    spelledDate = (Math.Abs(span.Hours) + " horas");
                }

                else if (totalSeconds < 172800.0)
                {
                    spelledDate = "um dia";
                }
            }
            else if (totalSeconds < 2592000.0)
            {
                requiresPreposition = true;
                spelledDate         = (Math.Abs(span.Days) + " dias");
            }
            else if (totalSeconds < 31104000.0)
            {
                requiresPreposition = true;
                int num2 = Convert.ToInt32(Math.Floor((double)(((double)Math.Abs(span.Days)) / 30.0)));
                spelledDate = ((num2 <= 1) ? "aprox. um mês" : ("aprox. " + num2 + " meses"));
            }
            else
            {
                int num3 = Convert.ToInt32(Math.Floor((double)(((double)Math.Abs(span.Days)) / 365.0)));
                requiresPreposition = true;
                spelledDate         = ((num3 <= 1) ? "aprox. um ano" : ("aprox. " + num3 + " anos"));
            }


            if (requiresPreposition & ((flags & RelativeDateOptions.IncludeSuffixes) == RelativeDateOptions.IncludeSuffixes) && isPast)
            {
                spelledDate += " atrás";
            }

            if (requiresPreposition & ((flags & RelativeDateOptions.IncludePrefixes) == RelativeDateOptions.IncludePrefixes))
            {
                if (isPast)
                {
                    spelledDate = "há " + spelledDate;
                }
                else
                {
                    spelledDate = "daqui a " + spelledDate;
                }
            }

            return(spelledDate);
        }