-4

このコードセットをwp7に移植する方法

-(NSString *) timeSincePosted:(NSString *)ad_date {
if (!ad_date || ([ad_date compare:@""] == NSOrderedSame) || ([ad_date rangeOfString:@"-"].location == NSNotFound))
    return @"";

// date format
//2010-04-22,  5:27PM EDT
NSDateFormatter *dateFormatter_CL = [[[NSDateFormatter alloc] init] autorelease];
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
[dateFormatter_CL setLocale:enUSPOSIXLocale];
[dateFormatter_CL setDateFormat:@"yyyy-MM-dd, h:mma zzz"]; 
NSDate *CL_adDate = [dateFormatter_CL dateFromString: ad_date];

// Time since now
NSTimeInterval deltaT = -[CL_adDate timeIntervalSinceNow];
int deltaMin = deltaT/60;
int deltaHr = deltaMin/60;
int deltaDay = deltaHr/24;

if (deltaMin < 1) return [NSString stringWithString:@"0 mins"];
if (deltaMin == 1) return [NSString stringWithString:@"1 min"];
if (deltaMin < 60) return [NSString stringWithFormat:@"%d mins", deltaMin];
if (deltaHr <= 1) return [NSString stringWithString:@"1 hr"];
if (deltaHr < 24) return [NSString stringWithFormat:@"%d hrs", deltaHr];
if (deltaDay < 2) return [NSString stringWithString:@"1 day ago"];
return [NSString stringWithFormat:@"%d days ago", deltaDay];
}
4

2 に答える 2

3

私はここで少しワイヤーで飛んでいますが、あなたは次のようなものが欲しいと思います:

    /// <summary>
    /// Returns a string approximation of the time since the specified time.
    /// </summary>
    /// <param name="adDate">The ad date.</param>
    /// <returns></returns>
    public static string TimeSincePosted(string adDate)
    {
        return TimeSincePosted(DateTime.ParseExact(adDate, "\D\a\t\e: yyyy-MM-dd, hh:mmtt K", CultureInfo.CurrentUICulture));
    }

    /// <summary>
    /// Returns a string approximation of the time since the specified time.
    /// </summary>
    /// <param name="adDate">The ad date.</param>
    /// <returns></returns>
    public static string TimeSincePosted(DateTime adDate)
    {
        TimeSpan delta = DateTime.Now - adDate;

        if( delta.TotalDays > 1 )
        {
            return string.Format("{0} days ago", delta.TotalDays);
        }
        else if( delta.TotalDays == 1)
        {
            return "1 day ago";
        }
        else if( delta.TotalHours > 1)
        {
            return string.Format("{0} hrs", delta.TotalHours);
        }
        else if( delta.TotalHours == 1)
        {
            return "1 hr";
        }
        else if( delta.TotalMinutes > 1)
        {
            return string.Format("{0} mins", delta.TotalMinutes);
        }
        else if( delta.TotalMinutes == 1)
        {
            return "1 min";
        }
        else
        {
            return "0 mins";
        }
    }
于 2012-04-06T11:02:12.550 に答える
2

Objective Cのコードは、最初に文字列から日付と時刻を解析し、次に「1日前」のように読みやすいものに変換します。

Rowland Shawのコードは2番目の部分をうまく解決しますが、C#は「CDT」のようなタイムゾーン名をサポートしていないため、日付/時刻文字列の解析に失敗します。これを解決するには、https://stackoverflow.com/a/284785/413337のメソッドを確認する必要がConvertZoneToLocalDifferentialあります。このメソッドは日付/時刻文字列を前処理するため、C#で解析できます。

于 2012-04-06T11:07:08.740 に答える