我想知道是否有一种将日期时间格式化为我想要的方式的方法。因此,基本上我的场景是,当我的应用程序从隔离存储中获取一个文件时,它会将日期显示为“小时:分钟”。我想要它,以便当应用程序得到日期,它显示为“小时:日期”,但一天后,它显示它为“日/月”,我怎么能这样做呢?
这就是我得到的:
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多少有点像本地消息应用程序。日期格式取决于接收消息的时间。
发布于 2013-11-27 13:21:38
您可能需要为这些.你手机上的日期和时间的格式取决于你手机的文化和本地化。下面代码行中的一些内容是一个开始。如果您需要VB示例,请告诉我,日期格式文档可以找到这里
/// <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编辑:添加VB代码
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 Enumhttps://stackoverflow.com/questions/20240593
复制相似问题