2013-11-27 2 views
0

Мне было интересно, есть ли способ форматировать datetime так, как я этого хочу. Таким образом, в основном, мои сценарии состоят в том, что когда мое приложение получает файл из изолированного хранилища, он показывает дату как «Часы: минуты». Я хочу, чтобы, когда приложение получает дату, она отображается как «Часы: Дата», но через день она показывает это как «День/Месяц», как я могу это сделать?WP7 - форматирование DateTime. Как?

Soo далеко это то, что я получил:

Dim Storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
     Dim directory As String = "./MyNote/SavedNotes/*.*" 
     Dim filenames As String() = Storage.GetFileNames(directory) 
     Dim dataSource As New List(Of SampleData)() 
     For Each filename As String In filenames 
      Dim ISF As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
      Dim FS As IsolatedStorageFileStream = ISF.OpenFile("MyNote/SavedNotes/" & filename, FileMode.Open, FileAccess.Read) 
      Using SR As New StreamReader(FS) 
       Dim FTime As String = Storage.GetCreationTime("MyNote/SavedNotes/" & filename).ToString("d/M ddd") 
       Dim DATESS As String = SR.ReadLine 
       Dim ReadName As String = SR.ReadLine 
       dataSource.Add(New SampleData() With {.FileNameX = filename, .Description = ReadName, .FileTime = FTime}) 
      End Using 
      SavedNotesList.ItemsSource = dataSource 
     Next 

Более или менее, как родное приложение обмена сообщениями. Форматы даты в зависимости от того, когда сообщение было получено.

ответ

3

Возможно, вам понадобится создать некоторые служебные функции для ... формат даты и времени на вашем телефоне зависит от культуры и локализации вашего телефона. Что-то по линии кода ниже - это начало. дайте мне знать, если вам нужны примеры VB, дата форматы документации можно найти here

 /// <summary> 
    /// Get's a date description 
    /// </summary> 
    /// <param name="dateTime"> 
    /// The date to compare 
    /// </param> 
    /// <returns> 
    /// A date description. 
    /// </returns> 
    public string GetRelativeTime(DateTime dateTime) 
    { 
     var timeMode = GetTimeMode(dateTime); 

     switch (timeMode) 
     { 
      case TimeMode.Seconds: 
      case TimeMode.Minutes: 
      case TimeMode.Hours: 
       return dateTime.ToString("HH:mm"); 
      default: 
       return dateTime.ToString("dd/MM");; 
     } 
    } 

    /// <summary> 
    /// Gets a date mode. 
    /// </summary> 
    /// <param name="dateTime"> 
    /// The date to test. 
    /// </param> 
    /// <returns> 
    /// A date mode. 
    /// </returns> 
    public TimeMode GetTimeMode(DateTime dateTime) 
    { 
     var timeSpan = DateTime.Now - dateTime; 

     if (timeSpan < TimeSpan.FromSeconds(60)) return TimeMode.Seconds; 
     if (timeSpan < TimeSpan.FromMinutes(60)) return TimeMode.Minutes; 
     if (timeSpan < TimeSpan.FromHours(24)) return TimeMode.Hours; 
     if (timeSpan <= TimeSpan.FromDays(30)) return TimeMode.Days; //this can be tricky for days in month, adapt as appropriate. 
     if (timeSpan.Days <= 365) return TimeMode.Months; //adapt as apropriate for leap years. 

     return TimeMode.Years; 
    } 

    /// <summary> 
    /// Date Modes. 
    /// </summary> 
    public enum TimeMode 
    { 
     Seconds, 
     Minutes, 
     Hours, 
     Days, 
     Weeks, 
     Months, 
     Years 
    } 

тесты со следующими

MessageBox.Show(GetRelativeTime(DateTime.Now.Subtract(new TimeSpan(0, 0, 0, 20)))); //20 seconds ago 
     MessageBox.Show(GetRelativeTime(DateTime.Now.Subtract(new TimeSpan(0, 0, 20, 0)))); //20 minutes ago 
     MessageBox.Show(GetRelativeTime(DateTime.Now.Subtract(new TimeSpan(0, 20, 0, 0)))); //20 hours ago 
     MessageBox.Show(GetRelativeTime(DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0)))); //1 day ago 
     MessageBox.Show(GetRelativeTime(DateTime.Now.Subtract(new TimeSpan(2, 0, 0, 0)))); //2 days ago 

EDIT: добавлен VB Code

Dim Storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
    Dim directory As String = "./MyNote/SavedNotes/*.*" 
    Dim filenames As String() = Storage.GetFileNames(directory) 
    Dim dataSource As New List(Of SampleData)() 
    For Each filename As String In filenames 
     Dim ISF As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
     Dim FS As IsolatedStorageFileStream = ISF.OpenFile("MyNote/SavedNotes/" & filename, FileMode.Open, FileAccess.Read) 
     Using SR As New StreamReader(FS) 
      'Modified code 
      Dim FTime As String = GetRelativeTime(Storage.GetCreationTime("MyNote/SavedNotes/" & filename)) 
      Dim DATESS As String = SR.ReadLine 
      Dim ReadName As String = SR.ReadLine 
      dataSource.Add(New SampleData() With {.FileNameX = filename, .Description = ReadName, .FileTime = FTime}) 
     End Using 
     SavedNotesList.ItemsSource = dataSource 
    Next 

«Новый кодекс

''' <summary> 
''' Get's a date description 
''' </summary> 
''' <param name="dateTime"> 
''' The date to compare 
''' </param> 
''' <returns> 
''' A date description. 
''' </returns> 
Public Function GetRelativeTime(dateTime As DateTime) As String 
Dim myTimeMode = GetTimeMode(dateTime) 

Select Case myTimeMode 
    Case TimeMode.Seconds, TimeMode.Minutes, TimeMode.Hours 
     Return dateTime.ToString("HH:mm") 
    Case Else 
     Return dateTime.ToString("dd/MM") 
End Select 
End Function 

''' <summary> 
''' Gets a date mode. 
''' </summary> 
''' <param name="dateTime"> 
''' The date to test. 
''' </param> 
''' <returns> 
''' A date mode. 
''' </returns> 
Public Function GetTimeMode(timeToTest As DateTime) As TimeMode 
Dim timeDifference = DateTime.Now - timeToTest 

If timeDifference < TimeSpan.FromSeconds(60) Then 
    Return TimeMode.Seconds 
End If 
If timeDifference < TimeSpan.FromMinutes(60) Then 
    Return TimeMode.Minutes 
End If 
If timeDifference < TimeSpan.FromHours(24) Then 
    Return TimeMode.Hours 
End If 
If timeDifference <= TimeSpan.FromDays(30) Then 
    Return TimeMode.Days 
End If 
'this can be tricky for days in month, adapt as appropriate. 
If timeDifference.Days <= 365 Then 
    Return TimeMode.Months 
End If 
'adapt as apropriate for leap years. 
Return TimeMode.Years 
End Function 

''' <summary> 
''' Date Modes. 
''' </summary> 
Public Enum TimeMode 
Seconds 
Minutes 
Hours 
Days 
Weeks 
Months 
Years 
End Enum 
+0

Ho Можно ли реализовать этот метод в моем сценарии? Поэтому в моем приложении я создаю текстовый файл, и он загружает его на главной странице. Он должен показывать время, созданное, если оно создано сегодня, но формат даты, если он создан в любой другой день, кроме сегодняшнего дня. Код выглядит хорошо, просто я не знаю, как его использовать :( –

+0

См. Измененный ответ для кода VB – FunksMaName

+0

Да! Спасибо, много всего работает :) –

Смежные вопросы