我正在尝试从DateTime对象创建一个字符串,格式为mm:dd:yyyy
。
传统上,DateTime
对象为mm:dd:yyyy hrs:min:sec AM/PM
。
有没有办法快速删除DateTime的hrs:min:sec AM/PM
部分,这样当我将其转换为ToString()
时,它只会导致mm:dd:yyyy
?
答案 0 :(得分:12)
要回答您的问题,请注意 - 您必须将其存储在其他类型中。最简单的选择是使用字符串。
string date = dateTime.ToString("MM:dd:yyyy");
但是我也强烈建议不要在程序内部将日期存储为字符串。这将使得难以对它们进行任何计算或比较。此外,我建议你不要强迫你的日期表示形式的特定文化,因为这意味着你的应用程序可能无法在其他文化中按预期工作。
稍微复杂一点的方法是创建一个覆盖ToString的自定义类。我也会避免这种情况,因为使用标准库函数的类型仍然很难。你必须一直来回转换。
将其保留为DateTime,并仅在表示层中转换为字符串。您可以使用DateTime.ToShortDateString
打印用户友好的区域性文化字符串。
答案 1 :(得分:10)
datetime DateWithTimeNoSeconds =
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);
这将获得当前日期&时间的日期,并增加小时和分钟。
答案 2 :(得分:8)
DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());
// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));
// The example displays the following output to the console:
// 6/1/2008 7:47:00 AM
// 6/1/2008
// 6/1/2008 12:00 AM
// 06/01/2008 00:00
http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx
答案 3 :(得分:7)
通常,我使用DateTime.ToShortDateString()以Culture
感知方式转换为字符串。
这样,您可以将其格式化为仅限于当前线程的文化集的当前格式。
答案 4 :(得分:7)
虽然在大多数情况下我同意Mark Byers,但我遇到的情况是我需要存储一个日常时间,这个日期时间只是小时的。存储分钟和秒钟不仅是多余的,而且也是不准确的。用户只需选择日期和小时,因此当用户选择日期和小时时,分钟和秒将设置为当前时间。
在这种情况下,删除分钟和秒钟非常容易。这是代码:
scheduledDate = scheduledDate.AddMinutes(
scheduledDate.Minute * -1).AddSeconds(
scheduledDate.Second * -1);
然后我将它作为完整日期时间存储在DB中,其中分钟和秒始终为0.
答案 5 :(得分:3)
如果要从using System;
using System.Collections.Generic;
namespace WpfPermutations
{
public class PermutationOuelletLexico3<T>
{
// ************************************************************************
private T[] _sortedValues;
private bool[] _valueUsed;
public readonly long MaxIndex; // long to support 20! or less
// ************************************************************************
public PermutationOuelletLexico3(T[] sortedValues)
{
if (sortedValues.Length <= 0)
{
throw new ArgumentException("sortedValues.Lenght should be greater than 0");
}
_sortedValues = sortedValues;
Result = new T[_sortedValues.Length];
_valueUsed = new bool[_sortedValues.Length];
MaxIndex = Factorial.GetFactorial(_sortedValues.Length);
}
// ************************************************************************
public T[] Result { get; private set; }
// ************************************************************************
/// <summary>
/// Return the permutation relative to the index received, according to
/// _sortedValues.
/// Sort Index is 0 based and should be less than MaxIndex. Otherwise you get an exception.
/// </summary>
/// <param name="sortIndex"></param>
/// <param name="result">Value is not used as inpu, only as output. Re-use buffer in order to save memory</param>
/// <returns></returns>
public void GetValuesForIndex(long sortIndex)
{
int size = _sortedValues.Length;
if (sortIndex < 0)
{
throw new ArgumentException("sortIndex should be greater or equal to 0.");
}
if (sortIndex >= MaxIndex)
{
throw new ArgumentException("sortIndex should be less than factorial(the lenght of items)");
}
for (int n = 0; n < _valueUsed.Length; n++)
{
_valueUsed[n] = false;
}
long factorielLower = MaxIndex;
for (int index = 0; index < size; index++)
{
long factorielBigger = factorielLower;
factorielLower = Factorial.GetFactorial(size - index - 1); // factorielBigger / inverseIndex;
int resultItemIndex = (int)(sortIndex % factorielBigger / factorielLower);
int correctedResultItemIndex = 0;
for(;;)
{
if (! _valueUsed[correctedResultItemIndex])
{
resultItemIndex--;
if (resultItemIndex < 0)
{
break;
}
}
correctedResultItemIndex++;
}
Result[index] = _sortedValues[correctedResultItemIndex];
_valueUsed[correctedResultItemIndex] = true;
}
}
// ************************************************************************
/// <summary>
/// Calc the index, relative to _sortedValues, of the permutation received
/// as argument. Returned index is 0 based.
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
public long GetIndexOfValues(T[] values)
{
int size = _sortedValues.Length;
long valuesIndex = 0;
List<T> valuesLeft = new List<T>(_sortedValues);
for (int index = 0; index < size; index++)
{
long indexFactorial = Factorial.GetFactorial(size - 1 - index);
T value = values[index];
int indexCorrected = valuesLeft.IndexOf(value);
valuesIndex = valuesIndex + (indexCorrected * indexFactorial);
valuesLeft.Remove(value);
}
return valuesIndex;
}
// ************************************************************************
}
}
对象中删除小时,秒,毫秒(从重置为0)而不转换为字符串,则可以使用DateTime
属性。
Date
下面的示例使用Date属性提取DateTime值的日期组件,并将其时间组件设置为零(或0:00:00或午夜)。
答案 6 :(得分:2)
关于DateTime.AddMinutes
(或秒或小时),如果您想要删除而不是仅添加一个负数!
答案 7 :(得分:1)
简单的方法,可能不是最好的但是
DateTime dt = new DateTime();
dt = DateTime.Now;
string sdate = dt.ToShortDateString();
dt = DateTime.Parse(sdate);
或简称
var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
答案 8 :(得分:0)
这样的日期和时间没有秒:
private DateTime _startTime;
public DateTime StartTime
{
get { return _startTime; }
set
{
_startTime = value.AddSeconds(-value.Second)
.AddMilliseconds(-value.Millisecond);
}
}