Это потому, что числа ниже 10 должны быть дополнены нулями, но это не так.
Вы можете использовать функцию padStart
для достижения ожидаемого результата - добавить начальный 0 символ, если длина числа меньше 2. Я немного изменил ваш код, но все, что вам нужно, это использовать .toString().padStart(2, '0')
число.
var today = new Date();
var date = [
today.getFullYear(),
today.getMonth() + 1,
today.getDate(),
].map((value) => value.toString().padStart(2, '0')).join('-');
var time = [
today.getHours(),
today.getMinutes(),
today.getSeconds(),
].map((value) => value.toString().padStart(2, '0')).join(':');;
var dateTime = date + ' ' + time;
console.log(dateTime);
Попробуйте это:
Hashtable check_for_duplicates = new HashTable();
foreach (object item in items)
{
if (check_for_duplicates.ContainsKey(item["ItemID"]) &&
check_for_duplicates[item["ItemID"]].Equals(item["Path"]))
{
//throw error
}
}
Кроме того, если Вы используете.NET 2.0 или выше, рассматриваете использование Дженериков, как это:
List<Item> items; // Filled somewhere else
// Filters out duplicates, but won't throw an error like you want.
HashSet<Item> dupeCheck = new HashSet<Item>(items);
items = dupeCheck.ToList();
На самом деле я просто проверил, и похоже, что HashSet является.NET 3.5 только. Словарь более подходил бы для 2,0:
Dictionary<int, string> dupeCheck = new Dictionary<int, string>();
foreach(Item item in items) {
if(dupeCheck.ContainsKey(item.ItemID) &&
dupeCheck[item.ItemID].Equals(item.Path)) {
// throw error
}
else {
dupeCheck[item.ItemID] = item.Path;
}
}
Если Вы использовали Dictionary
вместо этого, TryGetValue
метод помог бы. Я не думаю, что существует действительно лучший путь к в значительной степени устаревший Hashtable
класс.
object value;
if (dic.TryGetValue("key", out value) && value == thisValue)
// found duplicate
if (check_for_duplicates.ContainsKey(item["ItemID"]) &&
check_for_duplicates[item["ItemID"]] == item["Path"])
{
//throw error
}
Почему бы не использовать a Dictionary
вместо этого?
Это бросит ArgumentException, при попытке Add
ключ, который уже существует в Dictionary
.
Тем путем можно поймать дубликат в данный момент, он добавляется, вместо того, чтобы выполнить a check_for_duplicates
тест позже.
ContainsKey является лучшим методом.
Если бы Вы не вынуждены использовать.NET 1.1, я использовал бы Словарь, представленный в.NET 2.0.
Это намного лучше, чем Хеш-таблица от производительности и со строгим контролем типов.
Dictionary<string, int> betterThanAHash = new Dictionary<string, int>();
betterThanAHash.ContainsKey("MyKey");
Это отчасти зависит, что массив элементов..., Вы захотите что-то как:
check_for_duplicates.ContainsValue(item["Path"]);
Предположение, что объект является некоторой формой поиска. Действительно необходимо бросать объект или использовать систему типов для на самом деле доступа любые значения через индекс.
Вы не сказали, какую версию вещей вы использовали. Есть ли причина, по которой вы должны использовать Hashtable против HashSet? Вам не нужно было бы проверять наличие дубликатов, если ваша структура данных их не допускает. См. Также:
http://www.vcskicks.com/csharp_data_structures2.html
Кроме этого, на вопрос о том, как выполнить то же самое в Hashtable, уже дан ответ здесь. Я просто указываю на то, что вам не нужно выполнять всю патологическую проверку, если вы запрещаете это в первую очередь.
Hashtable check_for_duplicates = new HashTable();
foreach (object item in items)
{
if (check_for_duplicates.ContainsKey(item["ItemID"]) && check_for_duplicates[item["ItemID"]] == item["Path"])
{
//throw error
}
}
Я действительно полагаю, что это - то, что Вы ищете.
РЕДАКТИРОВАНИЕ - Похоже, я был избит к перфорации :P